XPath para encontrar valores anidados
Pregunta
Tengo algunos XML que tengo problemas para procesar con XPath. Parece que no puedo obtener los valores que estoy buscando. El XML está estructurado así:
<Group>
<Menu>
<Name>Top Menu</Name>
<Document>
<DocName>Readme.txt</DocName>
</Document>
<Menu>
<Name>Sub Menu</Name>
<Document>
<DocName>Manual.pdf</DocName>
</Document>
<Document>
<DocName>UserGuide.pdf</DocName>
</Document>
</Menu>
</Menu>
</Group>
Dado el nombre del menú, quiero recuperar una lista de DocumentNodes en el menú. Por ejemplo, dado & Quot; Submenú & Quot ;, me gustaría recuperar los dos nodos de documento para Manual.pdf y UserGuide.pdf.
Actualmente, obtengo esta información usando un código que recorre a los niños, pero prefiero simplemente extraerla directamente usando XPath, pero mis habilidades con ella son débiles.
(Y antes de preguntar, no puedo reestructurar el XML. Me lo proporciona de esta manera).
¿Alguna idea?
Solución
Aquí hay una XPath que hará lo que quieras:
//Menu[Name='Sub Menu']/Document
Otros consejos
/<Menu>[\w\n]*<Name>Sub Menu</Name>[\w\n]*<Document>[\w\n]*(<DocName>([a-ZA-Z0-9\.]+)</DocName>[\w\n]*)*</Menu>/
Es más que probable que funcione (con un pequeño ajuste, ¡esto es un poco difícil!), pero no creo que Regex sea el camino a seguir. Yo personalmente usaría XPath o DOM