J'essaie d'apprendre XPath. La théorie semble extrêmement simple, sauf pour le fait que cela ne fonctionne pas.Utilisation XPATH pour accéder aux éléments XML (était: Bon tutoriel pour apprendre xpath)
Je suis en train d'obtenir le contenu de chaque élément cible
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);
}
Le doc XML ressemble à ceci:
<?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>
C'est presque mot pour mot d'un tutoriel, mais je peux » t le faire fonctionner. Lorsque l'itérateur est créé, en mode débogage, je peux voir que le document est chargé, mais l'itérateur ne trouve aucun résultat et ignore la boucle While. Je fais probablement quelque chose d'extrêmement stupide, mais quoi?
Quelqu'un sait où je peux trouver un bon tutoriel XPATH fiable?
Merci à tous. Il s'avère que j'ai ignoré le fait qu'il y avait un espace de noms (que j'ai supprimé en simplifiant le code XML car je n'avais pas réalisé qu'il était important), et avec l'ajout d'un gestionnaire d'espace de noms, le code fonctionne bien.
J'étudie maintenant les tutoriels XPATH proposés et ils ont l'air bien.
Merci Martin. Vous avez raison, il y avait un espace de noms sur l'original que j'ai enlevé en "simplifiant" le fichier XML, et bien sûr, maintenant cela fonctionne. – Sylverdrag
@Sylverdrag: Et comment cette réponse sert le titre de votre question ** "Bon tutoriel pour apprendre xpath" **. Je pense que vous devriez éditer cela. –
@Alejandro: C'était une question 2-en-1, et je dois en quelque sorte la remettre à la personne qui parvient à repérer le problème sous-jacent, bien que j'ai remis en question les bonnes réponses du tutoriel. – Sylverdrag