Pregunta

No puedo navegar por el Doc XML mediante programación y necesito una solución XPath de una línea por razones que describo al final.

Estoy trabajando con un esquema XML que se parece al siguiente. (Esto es algo que tengo que usar como es).

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
  <!-- Child 2 -->
  <Child>
      <Name>Mike</Name>
      <Age>25</Age>
  </Child>
   <!-- Child 3 --> 
  <Child>
      <Name>Jane</Name>
      <Age>20</Age>
  </Child>
</Root>

Suponiendo que ya estoy en el nodo "Joe" (es decir, el elemento de nombre dentro del niño 1), necesito definir una consulta XPath que "envuelva" ese nodo de la siguiente manera:

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
</Root>

He probado varias combinaciones de antepasados, unión de cuerda, concat, etc., pero parece que no puedo encontrar la solución que "envuelva" el elemento correctamente. (La forma en que estaba usando Ancestor estaba regresando todos Nodos infantiles, por ejemplo, que no es lo que necesito).

Algunas otras consideraciones:

  1. La solución debe ser una consulta de XPath de una línea, si es posible (por razones que se dan a continuación).
  2. Tiene que ser lo suficientemente genérico como para trabajar para cualquier elemento infantil (es decir, no puede suponer que siempre estoy en el primer o segundo o tercer niño, por ejemplo).
  3. Del ejemplo anterior, puede ver que en realidad no necesito el nodo raíz real por-SE, solo su etiqueta (es decir, no quiero todos los nodos infantiles en él). Sin embargo, necesito el nodo infantil real (para obtener el nombre y la edad).

Nota: Para lo que vale, en realidad no puedo navegar el XML mediante programación. Estoy usando una biblioteca (cuyo código no puedo cambiar) en la que tengo que definir todo en términos de consultas XPath de una línea dentro de un archivo de configuración. Esencialmente navegará a través de todos los elementos de nombre, por lo que mi solución tiene que funcionar desde ese punto.

No hay solución correcta

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