xmllint falha ao consultar corretamente com xpath

Estou tentando consultar um arquivo xml gerado pelo adium. xmlwf diz que está bem formado. Usando a opção de debugging do xmllint eu recebo o seguinte:

$ xmllint --debug doc.xml DOCUMENT version=1.0 encoding=UTF-8 URL=doc.xml standalone=true ELEMENT chat default namespace href=http://purl.org/net/ulf/ns/0.4-02 ATTRIBUTE account TEXT content=foo@bar.com ATTRIBUTE service TEXT compact content=MSN TEXT compact content= ELEMENT event ATTRIBUTE type 

Tudo parece analisar bem. No entanto, quando tento consultar até as coisas mais simples, não obtenho nada:

 $ xmllint --xpath '/chat' doc.xml XPath set is empty 

O que está acontecendo? Executar exatamente a mesma consulta usando xpath retorna os resultados corretos (mas sem nova linha entre os resultados). Estou fazendo algo errado ou o xmllint simplesmente não está funcionando corretamente?

Aqui está uma versão mais curta e anônima do xml que mostra o mesmo comportamento:

    
hi

Eu não uso xmllint, mas acho que o motivo pelo qual seu XPath não está funcionando é porque seu arquivo doc.xml está usando um namespace padrão ( http://purl.org/net/ulf/ns/0.4-02 ).

Pelo que vejo, você tem duas opções.

A. Use xmllint no modo shell e declare o namespace com um prefixo. Você pode então usar esse prefixo no seu XPath.

  xmllint --shell doc.xml / > setns x=http://purl.org/net/ulf/ns/0.4-02 / > xpath /x:chat 

B. Use local-name() para corresponder aos nomes dos elementos.

  xmllint --xpath /*[local-name()='chat'] 

Você também pode querer usar namespace-uri()='http://purl.org/net/ulf/ns/0.4-02' junto com local-name() então você tem certeza de retornar exatamente o que você pretende Retorna.