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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top