validate parse xml xpath xmllint

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>