Question

Je ne peux pas naviguer dans le DOC XML par programme et j'ai besoin d'une solution XPATH en ligne pour des raisons que je décris à la fin.

Je travaille avec un schéma XML qui ressemble à quelque chose comme celui ci-dessous. (C'est quelque chose que je dois utiliser tel quel.)

<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>

En supposant que je suis déjà au nœud "Joe" (c'est-à-dire l'élément de nom à l'intérieur de l'enfant 1), j'ai besoin de définir une requête XPath qui "enveloppera" ce nœud comme suit:

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

J'ai essayé diverses combinaisons d'ancêtre, de jointure, de concat, etc., mais je n'arrive pas à trouver la solution qui "enveloppe correctement l'élément. (La façon dont j'utilisais un ancêtre revenait tout Les nœuds enfants, par exemple, ce qui n'est pas ce dont j'ai besoin.)

Quelques autres considérations:

  1. La solution doit être une requête XPath en ligne, si cela est possible (pour des raisons ci-dessous).
  2. Il doit être assez générique pour travailler pour n'importe quel élément enfant (c'est-à-dire, il ne peut pas supposer que je suis toujours au premier ou au deuxième ou au troisième enfant, par exemple).
  3. D'après l'exemple ci-dessus, vous pouvez voir que je n'ai pas vraiment besoin du nœud racine réel par SE, juste sa balise (c'est-à-dire que je ne veux pas tous les nœuds enfants en dessous). Cependant, j'ai besoin du nœud enfant réel (afin que j'obtienne le nom et l'âge).

Remarque: Pour ce que ça vaut, je ne peux pas réellement naviguer dans le XML par programme. J'utilise une bibliothèque (dont je ne peux pas changer le code) dans lequel je dois tout définir en termes de requêtes XPath en ligne dans un fichier de configuration. Il naviguera essentiellement à travers tous les éléments de nom, donc ma solution doit fonctionner à partir de ce point.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top