解析XFDL内容-C#

解析XFDL内容-C#,c#,xml,xpath,xfdl,C#,Xml,Xpath,Xfdl,我的任务是从XFDL文件中提取相关数据。我正试图使用XmlDocument的SelectSignleNode方法来实现这一点。然而,事实证明这是不成功的 代表性XML: <XFDL> ... <page1> <check3>true</check3> </page1> ... <page sid="PAGE1"> <check sid="CHECK9"> <value>true</value&g

我的任务是从XFDL文件中提取相关数据。我正试图使用XmlDocument的SelectSignleNode方法来实现这一点。然而,事实证明这是不成功的

代表性XML:

<XFDL>
...
<page1>
<check3>true</check3>
</page1>
...
<page sid="PAGE1">
<check sid="CHECK9">
<value>true</value>
</check>
</page>
...
由于未选择XmlNode,因此生成System.NullReferenceException

我想我有一个xpath问题,但我似乎不明白在哪里。可以使用以下方法轻松选择早期的xml节点:

XmlNode checkBox = document.SelectSingleNode("//page1/check3");
MsgBox(checkBox.InnerText);
显示很好。为了阻止它通过,在
标签中没有
的定义

有人有什么见解吗


提前谢谢。

好的,就这么定了。XFDL定义了一个默认名称空间,该名称空间需要xpath查询的任意映射。就我而言:

XML:

问题更加复杂,因为
隐藏在另一个名称空间中定义的
中:xfdl。我的xpath查询变成:

document.SelectSingleNode("//xfdl:page[@sid='PAGE1']/a:check[@sid='CHECK9']/a:value", manager);
现在,这相当于XFDL,但可以应用于XML文档中定义了多个名称空间的其他问题

编辑1
来源:

xpath是否会产生多个节点?第一个:是。第二个:不,我不认为我也缺少一个嵌套路径。经过验证的完全枚举xpath如下:通过在IE中打开XML,xfdl>page>check>value。我缺少什么?好问题!如果你知道你不会在这里问。@sid值是否可能不是真正的大写?当你添加[@sid]限定符时,你对元素的XPath似乎起作用了,事情也会中断。添加限定符时,你说得对。我可以使用“GetElementsByTagName”获取“”的所有实例,但不希望与“SelectNodes”或“SelectSingleNode”合作。我确实在我的代表XML中遗漏了“”标记中的名称空间。为此,我实例化了“XmlNamespaceManager”,添加了所有名称空间,并调用了“SelectSingleNode(“xpath”,manager)”,没有任何其他效果。。。
<XFDL xmlns="http://www.ibm.com/xmlns/prod/xfdl/8.0" ... >
manager.AddNamespace("a", "http://www.ibm.com/xmlns/prod/xfdl/8.0");
//Append 'a:' to query elements
document.SelectSingleNode("//a:check[@sid='CHECK9']/a:value", manager);
document.SelectSingleNode("//xfdl:page[@sid='PAGE1']/a:check[@sid='CHECK9']/a:value", manager);