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

Syl*_*rag 10 c# 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);
}
Run Code Online (Sandbox Code Playgroud)

XML文档如下所示:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

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

Ski*_*ick 9

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


Mar*_*nen 9

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