使用XPATH访问XML元素(是:学习xpath的好教程)

我正在努力学习XPath。 这个理论似乎非常简单,除了它不起作用的事实。

我试图获得每个目标元素的内容

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); } 

XML文档如下所示:

    
Your Program Details Your Program Details Status Status

这几乎是从一个教程中逐字逐句,但我无法让它工作。 创建迭代器时,在调试模式下,我可以看到文档已加载,但迭代器没有找到结果并跳过While循环。

我可能正在做一些非常愚蠢的事情,但是什么呢?

谁知道我在哪里可以找到一个好的,可靠的XPATH教程?


谢谢大家。 事实certificate我忽略了这样一个事实:有一个名称空间(我在删除它的同时简化了XML代码,因为我没有意识到它很重要),并且通过添加名称空间管理器,代码运行正常。

我现在正在研究提出的XPATH教程,它们看起来很好。

也许XML不是您发布的,但具有默认的命名空间声明。 这是初学者编写的XPath表达式不选择他们想要选择的内容的主要原因。 在这种情况下,您需要一个XmlNamespaceManager http://msdn.microsoft.com/en-us/library/6k4x060d.aspx

我会选择经典的W3Schools教程 。 这就是我学习的方式,它让我很好。 绝对涵盖所有基础知识。

MSDN XPath语法

我发现zvon上的教程非常好。

这是XPath教程 。

我总是发现这个教程/参考非常有用… http://zvon.org/comp/r/tut-XPath_1.html#

UPDATE
我使用了您的代码和XML文档,并且能够毫无问题地检索目标元素。 我必须在XML文档的末尾关闭, and 元素,但我认为这是一个剪切和粘贴问题。 我想我的问题是(这是非常明显的),你确定XML文档正在加载,并且那个加载实际上有你正在追求的内容吗? 我复制了你的XML文档并在XPathDocument构造函数中对路径进行了硬编码,一切正常(意思是,StringBuilder有来自元素的文本)。

还尝试了ANSI和UTF-8编码 – 没问题。

我在我的开发环境中使用VS2010。

http://www.w3schools.com/xsl/xpath_intro.asp

顶部和xpath参考中都有一个教程。

我迟到了,但会为求职者发帖。

获取XPathbuilder 。 如果您想学习xpath,请使用此工具,示例扭曲的xml文件,打开xpath中的帮助部分并开始使用。

我现在正在使用它,我不敢相信我花了5分钟来选择我需要的东西。 (梦魇配置文件为xml)。

JQuery支持基本的XPath表达式,您可以使用它来练习编写XPath选择器。

我发现.Net中缺少强类型的xpath支持。 这是一个使用linq-esq表达式生成xpath的库。

http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq

例:

  var xpath = CreateXpath.Where(e => e.TargetElementName == "td" && e.TargetElementText.Contains("my test")); xpath generated: //td[contains(text(),'my test')]