C# 获取特定类型的所有子节点不返回任何内容
我正在尝试从C# 获取特定类型的所有子节点不返回任何内容,c#,xml,C#,Xml,我正在尝试从字符串XML节点获取所有PitXML元素 我的问题:当我从节点检索所有Pit元素时,XMLNodeList总是空的。我知道节点确实包含2个Pit元素,因此它应该包含2个节点元素 出什么事了 XmlDocument xdoc = new XmlDocument(); xdoc.Load(xmlFilePath); XmlNodeList xNodes = xdoc.DocumentElement.GetElementsByTagName("string_drainage"
字符串XML节点获取所有Pit
XML元素
我的问题:当我从节点检索所有Pit
元素时,XMLNodeList总是空的。我知道节点确实包含2个Pit
元素,因此它应该包含2个节点元素
出什么事了
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlFilePath);
XmlNodeList xNodes = xdoc.DocumentElement.GetElementsByTagName("string_drainage");
foreach (XmlNode dStr in xNodes) {
XmlNodeList pits = dStr.SelectNodes("pit");
MessageBox.Show("Num: "+pits.Count.ToString(), "Number");
// always outputs "Num: 0"
}
我使用的示例数据:
<string_drainage>
<pit>
<name>MH. </name>
<ip>0</ip>
<ratio>0</ratio>
<x>212908.89268569</x>
<y>612015.26122586</y>
<z>80.62414621</z>
</pit>
</string_drainage>
嗯。
0
0
212908.89268569
612015.26122586
80.62414621
详细数据:
<?xml version="1.0"?>
<xml12d xmlns="http://www.12d.com/schema/xml12d-10.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" language="English" version="1.0" date="2013-08-27" time="16:33:14" xsi:schemaLocation="http://www.12d.com/schema/xml12d-10.0 http://www.12d.com/schema/xml12d-10.0/xml12d.xsd">
<meta_data>
<units>
<metric>
<linear>metre</linear>
<area>square metre</area>
<volume>cubic metre</volume>
<temperature>celsius</temperature>
<pressure>millibars</pressure>
<angular>decimal degrees</angular>
<direction>decimal degrees</direction>
</metric>
</units>
<application>
<name>12d Model</name>
<manufacturer>12d Solutions Pty Ltd</manufacturer>
<manufacturer_url>www.12d.com</manufacturer_url>
<application>12d Model 10.0C1j</application>
<application_build>10.1.10.22</application_build>
<application_path>C:\Program Files\12d\12dmodel\10.00\nt.x64\12d.exe</application_path>
<application_date_gmt>24-Jul-2013 02:18:30</application_date_gmt>
<application_date>24-Jul-2013 12:18:30</application_date>
<project_name>mjkhjk</project_name>
<project_guid>{30A05217-706A-41c1-AF53-0D1A0975A5D0}</project_guid>
<project_folder>C:\12djobs\mjkhjk</project_folder>
<client>12d Training - NSW</client>
<dongle>572d471062</dongle>
<environment/>
<env4d>C:\12d\10.00\user\env.4d</env4d>
<user>Sam Zielke-Ryner</user>
<export_file_name>Tttt.xml</export_file_name>
<export_date_gmt>27-Aug-2013 06:33:14</export_date_gmt>
<export_date>27-Aug-2013 16:33:14</export_date>
</application>
</meta_data>
<comments>
<manufacturer>12d Solutions Pty Ltd</manufacturer>
<manufacturer_url>www.12d.com</manufacturer_url>
<application>12d Model 10.0C1j</application>
<application_build>10.1.10.22</application_build>
<application_path>C:\Program Files\12d\12dmodel\10.00\nt.x64\12d.exe</application_path>
<application_date_gmt>24-Jul-2013 02:18:30</application_date_gmt>
<application_date>24-Jul-2013 12:18:30</application_date>
<export_file_name>Tttt.xml</export_file_name>
<export_date_gmt>27-Aug-2013 06:33:14</export_date_gmt>
<export_date>27-Aug-2013 16:33:14</export_date>
</comments>
<string_drainage>
<name/>
<time_created>29-Jul-2013 02:02:03</time_created>
<time_updated>29-Jul-2013 02:02:11</time_updated>
<outfall>null</outfall>
<flow_direction>1</flow_direction>
<use_pit_con_points>false</use_pit_con_points>
<data_3d>
<p>212908.89268569 612015.26122586 0</p>
<p>212715.09268598 612007.24091243 84.20896044</p>
</data_3d>
<pit>
<name>MH. </name>
<type>CONC COVER</type>
<road_name/>
<road_chainage>null</road_chainage>
<diameter>1.1</diameter>
<con_point_mode>Points</con_point_mode>
<floating>true</floating>
<hgl>null</hgl>
<chainage>0</chainage>
<ip>0</ip>
<ratio>0</ratio>
<x>212908.89268569</x>
<y>612015.26122586</y>
<z>80.62414621</z>
</pit>
<pit>
<name>MH. </name>
<type>CONC COVER</type>
<road_name/>
<road_chainage>null</road_chainage>
<diameter>1.1</diameter>
<con_point_mode>Points</con_point_mode>
<floating>true</floating>
<hgl>null</hgl>
<chainage>193.96588699</chainage>
<ip>1</ip>
<ratio>0</ratio>
<x>212715.09268598</x>
<y>612007.24091243</y>
<z>84.20896044</z>
</pit>
<pipe>
<name>A</name>
<type>PVC</type>
<diameter>0.15</diameter>
<nominal_diameter>0.15</nominal_diameter>
<us_level>77.38411559</us_level>
<ds_level>79.32377446</ds_level>
<us_hgl>0</us_hgl>
<ds_hgl>0</ds_hgl>
<flow_velocity>0</flow_velocity>
<flow_volume>0</flow_volume>
<attributes>
<real>
<name>nominal diameter</name>
<value>0.15</value>
</real>
<real>
<name>calculated critical cover chainage</name>
<value>4.31482574</value>
</real>
</attributes>
</pipe>
</string_drainage>
</xml12d>
米
平方米
立方米
摄氏度
毫巴
十进制度
十进制度
12d模型
12d解决方案私人有限公司
www.12d.com
12d型10.0C1j
10.1.10.22
C:\ProgramFiles\12d\12dmodel\10.00\nt.x64\12d.exe
2013年7月24日02:18:30
2013年7月24日12:18:30
mjkhjk
{30A05217-706A-41c1-AF53-0D1A0975A5D0}
C:\12djobs\mjkhjk
12d培训-新南威尔士州
5725471062
C:\12d\10.00\user\env.4d
山姆·齐尔克·莱纳
Tttt.xml
2013年8月27日06:33:14
2013年8月27日16:33:14
12d解决方案私人有限公司
www.12d.com
12d型10.0C1j
10.1.10.22
C:\ProgramFiles\12d\12dmodel\10.00\nt.x64\12d.exe
2013年7月24日02:18:30
2013年7月24日12:18:30
Tttt.xml
2013年8月27日06:33:14
2013年8月27日16:33:14
2013年7月29日02:02:03
2013年7月29日02:02:11
无效的
1.
假的
212908.89268569 612015.26122586 0
212715.09268598 612007.24091243 84.20896044
嗯。
混凝土盖
无效的
1.1
要点
真的
无效的
0
0
0
212908.89268569
612015.26122586
80.62414621
嗯。
混凝土盖
无效的
1.1
要点
真的
无效的
193.96588699
1.
0
212715.09268598
612007.24091243
84.20896044
A.
聚氯乙烯
0.15
0.15
77.38411559
79.32377446
0
0
0
0
公称直径
0.15
计算临界覆盖链测长度
4.31482574
我希望这会对您有所帮助
test.xml是xml的副本/粘贴
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"c:\test.xml");
XmlNodeList xNodes = xdoc.DocumentElement.SelectNodes("pit");
Console.WriteLine("Num: " + xNodes.Count.ToString());
foreach (XmlNode dStr in xNodes)
{
Console.WriteLine("Name: " + dStr.SelectSingleNode("name").InnerText);
Console.WriteLine("ip: " + dStr.SelectSingleNode("ip").InnerText);
Console.WriteLine("ratio: " + dStr.SelectSingleNode("ratio").InnerText);
Console.WriteLine("X: " + dStr.SelectSingleNode("z").InnerText);
Console.WriteLine("Y: " + dStr.SelectSingleNode("y").InnerText);
Console.WriteLine("X: " + dStr.SelectSingleNode("x").InnerText);
}
Console.Read();
}
我希望这对你有帮助
test.xml是xml的副本/粘贴
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"c:\test.xml");
XmlNodeList xNodes = xdoc.DocumentElement.SelectNodes("pit");
Console.WriteLine("Num: " + xNodes.Count.ToString());
foreach (XmlNode dStr in xNodes)
{
Console.WriteLine("Name: " + dStr.SelectSingleNode("name").InnerText);
Console.WriteLine("ip: " + dStr.SelectSingleNode("ip").InnerText);
Console.WriteLine("ratio: " + dStr.SelectSingleNode("ratio").InnerText);
Console.WriteLine("X: " + dStr.SelectSingleNode("z").InnerText);
Console.WriteLine("Y: " + dStr.SelectSingleNode("y").InnerText);
Console.WriteLine("X: " + dStr.SelectSingleNode("x").InnerText);
}
Console.Read();
}
也许最好使用Xmldocument的XmlNode和XmlSingleNode也许最好使用Xmldocument的XmlNode和XmlSingleNode调用SelectNodes需要向其中添加默认名称空间
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("x", xdoc.DocumentElement.NamespaceURI);
XmlNodeList pits = dStr.SelectNodes("x:pit");
请参阅位于的帮助
我用于xml文件的一个技巧是在我使用的xml文件中始终使用别名名称空间。否则很难编写对它们的xpath引用 对SelectNodes的调用需要添加默认名称空间
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("x", xdoc.DocumentElement.NamespaceURI);
XmlNodeList pits = dStr.SelectNodes("x:pit");
请参阅位于的帮助
我用于xml文件的一个技巧是在我使用的xml文件中始终使用别名名称空间。否则很难编写对它们的xpath引用 这里少了一块拼图。这就是xml文件的全部内容吗?这是您真正的根节点吗?通常,这些问题与启动搜索时节点不正确有关@user1正确地指出,如果示例xml不是完整的xml,那么您的代码将基于不正确的节点。事实上,错误出现在代码的前面,xNodes my没有元素。@user1感谢您的评论。有关完整的xml文件,请参阅更新contents@Jason我已经通过打印出dStr的内部XML来测试是否具有正确的(仅(&only)字符串。它确实是正确的节点。@vhspeceros做了一个测试,但它不是空的。这里缺少一些拼图。这就是xml文件的全部内容吗?这是您真正的根节点吗?通常,这些问题与启动搜索时节点不正确有关@user1正确地指出,如果示例xml不是完整的xml,那么您的代码将基于不正确的节点。事实上,错误出现在代码的前面,xNodes my没有元素。@user1感谢您的评论。有关完整的xml文件,请参阅更新contents@Jason我已经通过打印出dStr的内部XML来测试是否具有正确的(仅(&only)字符串。它确实是正确的节点。@VhsPiceros做了一个测试,但它不是空的。此代码的问题是它将选择所有的坑,而不仅仅是特定string\u排水
节点内的坑。此代码的问题是它将选择所有坑,而不仅仅是特定string\u排水
节点内的坑