【发布时间】:2008-10-28 22:09:19
【问题描述】:
最近我一直在使用 XPathDocument 和 XNavigator 为给定的 XPath 和属性解析 XML 文件。当我提前知道 XPath 是什么时,它一直运行良好。
但有时,XPath 将是几个可能的 XPath 值之一,我希望能够测试给定的 XPath 是否存在。
如果我弄错了命名法,这就是我所说的 XPath - 给定这个 XML blob:
<foo>
<bar baz="This is the value of the attribute named baz">
</foo>
我可能正在寻找我称之为“//foo/bar”的 XPath,然后读取属性“baz”以获取值。
我用来执行此操作的代码示例:
XPathDocument document = new XPathDocument(filename);
XPathNavigator navigator = document.CreateNavigator();
XPathNavigator node = navigator.SelectSingleNode("//foo/bar");
if(node.HasAttributes)
{
Console.WriteLine(node.GetAttribute("baz", string.Empty));
}
现在,如果对 navigator.SelectSingleNode 的调用失败,它将返回 NullReferenceException 或 XPathException。我可以同时捕获这两个并将上面的内容重构为一个测试,以查看给定的 XPath 是否返回异常,但我想知道是否有更好的方法?
我没有在 Intellisense 中看到任何明显的东西。 XPathNavigator 具有 .HasAttributes 和 .HasChildren 但没有一次遍历一个节点的路径,我没有看到更好的使用方法。
【问题讨论】:
-
这与 LINQ 有什么关系? XPathNavigator 和 XPathDocument 不是 LINQ to XML 的一部分。