C# 使用XPath选择节点
我试图在c#中使用xpath选择节点 这是我的XML文件C# 使用XPath选择节点,c#,xml,xpath,selectnodes,C#,Xml,Xpath,Selectnodes,我试图在c#中使用xpath选择节点 这是我的XML文件 <?xml version="1.0" encoding="utf-8"?> <xObject version="3.0.2002.0" xmlns="http://schemas.microsoft.com/wix/2006/objects"> <section id="*" type="product"> <table name="NotThis">
<?xml version="1.0" encoding="utf-8"?>
<xObject version="3.0.2002.0" xmlns="http://schemas.microsoft.com/wix/2006/objects">
<section id="*" type="product">
<table name="NotThis">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>No, not this line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>No not, this line here 2</field>
</row>
</table>
<table name="XFile">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>This line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>This line here 2</field>
</row>
</table>
</section>
</xObject>
我想要输出的是每四个字段table name=“xfile”,如下所示:
This line here 1
This line here 2
如果您知道解决方案或更好的方法,请告诉我。首先-您应该只为命名空间提供uri:
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/wix/2006/objects");
第二,在提供节点名称时,应该使用名称空间。并且表具有属性name
,而不是type
:
XmlNodeList nodeList = root.SelectNodes("//ns:table[@name='XFile']/ns:row", nsmgr);
最后—选择行节点后,应选择第四个字段节点(其全名为ns:field):
输出:
Field: This line here 1
Field: This line here 2
注意:您可以直接获取字段,而无需在行上循环:
XmlNodeList fields =
root.SelectNodes("//ns:table[@name='XFile']/ns:row/ns:field[4]", nsmgr);
首先-您应该只为命名空间提供uri:
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/wix/2006/objects");
第二,在提供节点名称时,应该使用名称空间。并且表具有属性name
,而不是type
:
XmlNodeList nodeList = root.SelectNodes("//ns:table[@name='XFile']/ns:row", nsmgr);
最后—选择行节点后,应选择第四个字段节点(其全名为ns:field):
输出:
Field: This line here 1
Field: This line here 2
注意:您可以直接获取字段,而无需在行上循环:
XmlNodeList fields =
root.SelectNodes("//ns:table[@name='XFile']/ns:row/ns:field[4]", nsmgr);
首先-您应该只为命名空间提供uri:
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/wix/2006/objects");
第二,在提供节点名称时,应该使用名称空间。并且表具有属性name
,而不是type
:
XmlNodeList nodeList = root.SelectNodes("//ns:table[@name='XFile']/ns:row", nsmgr);
最后—选择行节点后,应选择第四个字段节点(其全名为ns:field):
输出:
Field: This line here 1
Field: This line here 2
注意:您可以直接获取字段,而无需在行上循环:
XmlNodeList fields =
root.SelectNodes("//ns:table[@name='XFile']/ns:row/ns:field[4]", nsmgr);
首先-您应该只为命名空间提供uri:
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/wix/2006/objects");
第二,在提供节点名称时,应该使用名称空间。并且表具有属性name
,而不是type
:
XmlNodeList nodeList = root.SelectNodes("//ns:table[@name='XFile']/ns:row", nsmgr);
最后—选择行节点后,应选择第四个字段节点(其全名为ns:field):
输出:
Field: This line here 1
Field: This line here 2
注意:您可以直接获取字段,而无需在行上循环:
XmlNodeList fields =
root.SelectNodes("//ns:table[@name='XFile']/ns:row/ns:field[4]", nsmgr);