Estoy tratando de aprender XPath. La teoría parece extremadamente simple, excepto por el hecho de que no funciona.Usando XPATH para acceder a elementos XML (fue: buen tutorial para aprender xpath)
Estoy tratando de obtener el contenido de cada elemento de destino
XPathDocument doc = new XPathDocument(sPath);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("/doc/file/body/trans-unit/target");
XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
sbDoc.Append(nav2.InnerXml);
}
El documento XML tiene el siguiente aspecto:
<?xml version="1.0" encoding="UTF-8"?>
<doc version="1.2">
<file original="affiliate.php" source-language="EN-US" target-language="FR-FR" datatype="php">
<header>
<skl>
<external-file href="affiliate.php"/>
</skl>
</header>
<body>
<trans-unit id="tu1">
<source xml:lang="EN-US">Your Program Details</source>
<target xml:lang="FR-FR">Your Program Details</target>
</trans-unit>
<trans-unit id="tu2">
<source xml:lang="EN-US">Status</source>
<target xml:lang="FR-FR">Status</target>
</trans-unit>
Esto es casi palabra por palabra de un tutorial, pero puedo' Lo hago funcionar. Cuando se crea el iterador, en el modo de depuración, puedo ver que el documento está cargado, pero el iterador no encuentra ningún resultado y omite el ciclo While.
Probablemente estoy haciendo algo extremadamente estúpido, pero ¿qué?
¿Alguien sabe dónde puedo encontrar un buen y confiable tutorial de XPATH?
Gracias a todos. Resulta que ignoré el hecho de que había un espacio de nombres (que eliminé al simplificar el código XML ya que no me di cuenta de que era importante), y con la adición de un administrador de espacio de nombres, el código funciona bien.
Ahora estoy estudiando los tutoriales de XPATH propuestos y se ven bien.
Gracias Martin. Tiene razón, había un espacio de nombres en el original que eliminé al "simplificar" el archivo XML, y por supuesto, ahora funciona. – Sylverdrag
@Sylverdrag: Y cómo esta respuesta sirve al título de su pregunta ** "Buen tutorial para aprender xpath" **. Creo que deberías editar eso. –
@Alejandro: Era una pregunta 2 en 1, y tengo que entregársela a la persona que se las arregla para detectar el problema subyacente, a pesar de que voté positivamente las buenas respuestas del tutorial. – Sylverdrag