parse - xmllint windows
xmllint no puede consultar correctamente con xpath (1)
No uso xmllint, pero creo que la razón por la que su XPath no funciona es porque su archivo doc.xml está usando un espacio de nombres predeterminado ( http://purl.org/net/ulf/ns/0.4-02
).
Por lo que puedo ver, tienes 2 opciones.
A. Use xmllint en modo shell y declare el espacio de nombres con un prefijo. Luego puede usar ese prefijo en su XPath.
xmllint --shell doc.xml
/ > setns x=http://purl.org/net/ulf/ns/0.4-02
/ > xpath /x:chat
B. Use local-name()
para hacer coincidir los nombres de los elementos.
xmllint --xpath /*[local-name()=''chat'']
También puede usar namespace-uri()=''http://purl.org/net/ulf/ns/0.4-02''
junto con local-name()
por lo que está seguro de devolver exactamente lo que pretende regreso.
Estoy intentando consultar un archivo xml generado por Adium. xmlwf dice que está bien formado. Al usar la opción de depuración de xmllint, obtengo lo siguiente:
$ 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
[email protected]
ATTRIBUTE service
TEXT compact
content=MSN
TEXT compact
content=
ELEMENT event
ATTRIBUTE type
Todo parece analizar perfectamente. Sin embargo, cuando trato de consultar incluso las cosas más simples, no obtengo nada:
$ xmllint --xpath ''/chat'' doc.xml
XPath set is empty
¿Qué esta pasando? Ejecutar exactamente la misma consulta utilizando xpath devuelve los resultados correctos (sin embargo, sin nueva línea entre los resultados). ¿Estoy haciendo algo mal o es que xmllint simplemente no funciona correctamente?
Aquí hay una versión más corta y anónima del xml que muestra el mismo comportamiento:
<?xml version="1.0" encoding="UTF-8" ?>
<chat xmlns="http://purl.org/net/ulf/ns/0.4-02" account="[email protected]" service="MSN">
<event type="windowOpened" sender="[email protected]" time="2011-11-22T00:34:43-03:00"></event>
<message sender="[email protected]" time="2011-11-22T00:34:43-03:00" alias="foo"><div><span style="color: #000000; font-family: Helvetica; font-size: 12pt;">hi</span></div></message>
</chat>