Sto cercando di imparare XPath. La teoria sembra estremamente semplice, fatta eccezione per il fatto che non funziona.Utilizzando XPath per accedere agli elementi XML (era: buon tutorial per imparare XPath)
Sto cercando di ottenere il contenuto di ogni elemento di destinazione
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);
}
Il documento XML è simile al seguente:
<?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>
Questo è quasi parola per parola da un tutorial, ma posso' Lo faccio funzionare. Quando viene creato l'iteratore, in modalità di debug, posso vedere che il documento è caricato, ma l'iteratore non trova alcun risultato e salta il ciclo While.
probabilmente sto facendo qualcosa di estremamente stupido, ma che cosa?
Qualcuno sa dove posso trovare un buon tutorial XPATH affidabile?
Grazie a tutti. È venuto fuori che ho ignorato il fatto che c'era uno spazio dei nomi (che ho rimosso mentre semplificavo il codice XML perché non avevo capito che era importante) e, con l'aggiunta di un gestore di namespace, il codice funziona correttamente.
Ora sto studiando le esercitazioni XPATH proposte e sembrano belle.
Grazie Martin. Hai ragione, c'era un namespace sull'originale che ho rimosso quando "semplificavo" il file XML e, naturalmente, ora funziona. – Sylverdrag
@Sylverdrag: E come questa risposta serve al titolo della tua domanda ** "Buon tutorial per imparare xpath" **. Penso che dovresti modificarlo. –
@Alejandro: Era una domanda 2 in 1, e devo consegnarlo alla persona che riesce a individuare il problema sottostante, anche se ho fatto invertire le buone risposte del tutorial. – Sylverdrag