我正在努力学习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教程,它们看起来很好.
也许XML不是你发布的那个,但有一个默认的命名空间声明.这是初学者编写的XPath表达式不选择他们想要选择的内容的主要原因.在这种情况下,您需要一个XmlNamespaceManager http://msdn.microsoft.com/en-us/library/6k4x060d.aspx.