Using XPATH to access XML elements (was: Good tutorial to learn xpath)
Solution 1
Maybe the XML is not the one you posted but has a default namespace declaration. That is the main reason why XPath expressions written by beginners don't select what they want to select. You would need an XmlNamespaceManager http://msdn.microsoft.com/en-us/library/6k4x060d.aspx in that case.
Solution 2
I'd go for the classic W3Schools tutorial. That's how I learnt, and it did me fine. Definitely covers all the basics.
Solution 3
Solution 4
I found that the tutorials on zvon are quite good.
Here is the XPath tutorial.
Solution 5
http://www.w3schools.com/xsl/xpath_intro.asp
There is a tutorial in the top and also xpath reference.
![Sylverdrag](https://i.stack.imgur.com/nr7te.jpg?s=256&g=1)
Sylverdrag
Updated on August 11, 2020Comments
-
Sylverdrag almost 4 years
I am trying to learn XPath. The theory seems extremely simple, except for the fact that it doesn't work.
I am trying to get the content of every target element
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); }
The XML doc looks like this:
<?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>
This is nearly word for word from a tutorial, but I can't get it to work. When the iterator is created, in debug mode, I can see that the document is loaded, but iterator finds no result and skips the While loop.
I am probably doing something extremely stupid, but what?
Anyone knows where I can find a good, reliable XPATH tutorial?
Thanks all. Turns out I ignored the fact that there was a namespace (which I removed while simplifying the XML code as I didn't realize it was important), and with the addition of a namespace manager, the code works fine.
I am now studying the XPATH tutorials proposed and they look good.
-
Admin almost 14 yearsJa! Ja! We always see answers to technical questions about javascript (and even about CSS) recommending to use a library like JQuery. But I've never seen it recommended as the tutorial!
-
Sylverdrag almost 14 yearsThanks Martin. You are right, there was a namespace on the original which I removed when "simplifying" the XML file, and of course, now it works.
-
Sylverdrag almost 14 yearsLooks like a great tutorial. Thanks!
-
Admin almost 14 years@Sylverdrag: And how this answer serves your question title "Good tutorial to learn xpath". I think you should edit that.
-
Sylverdrag almost 14 years@Alejandro: It was a 2-in-1 question, and I kind of have to hand it over to the person who manages to spot the underlying problem, although I did upvote the good tutorial answers.