我需要从XML文件中获取数据SHILS_V。我读了.xml
例如XML代码:
<SVED_PR_GS>
<ZGLV>
<VERSION>99</VERSION>
<DATA>9999</DATA>
<FILENAME>1234</FILENAME>
<FIRSTNAME>1234</FIRSTNAME>
</ZGLV>
<SVD>
<CODE></CODE>
<YEAR></YEAR>
<MONTH></MONTH>
</SVD>
<SV_PR_GS>
<OBSV>
<N_ZAP>1</N_ZAP>
<MO_SV_V>12345</MO_SV_V>
<SNILS_V>123456789</SNILS_V>
</OBSV>
</SV_PR_GS>
</SVED_PR_GS>
我的代码读取xml:
XmlDocument xml = new XmlDocument();
xml.Load(filename);
Console.WriteLine("this");
XmlNodeList nodes = xml.GetElementsByTagName("SVED_PR_GS/SV_PR_GS");
foreach (XmlNode n in nodes)
{
Console.WriteLine("in loop");
XmlNode snils_v = n["OBSV/SNILS_V"];
Console.WriteLine("Snils V: " + snils_v);
}
问题出在哪里? 如何从SNILS_V获取信息?
答案 0 :(得分:1)
GetElementsByTagName
需要一个标记名,而不是XPath表达式,&#34; SV_PR_GS&#34;会在那里工作。对于名为n的XmlNode实例的索引器也是如此,这个XPath将不起作用n["OBSV/SNILS_V"]
,在那里使用标记名,但你必须在那里处理额外的OBSV子项。
以下是适合我的输出代码:
XmlNodeList nodes = xml.GetElementsByTagName("SV_PR_GS");
foreach (XmlNode n in nodes)
{
Console.WriteLine("in loop");
// first get the OBSV element
XmlNode obsv = n["OBSV"];
// now we can reach the other childs
XmlNode snils_v = obsv["SNILS_V"];
// Value will be null for XmlElement types, use InnerText instead
Console.WriteLine("Snils V: {0}" , snils_v.InnerText);
}
请注意,对于XmlEode类型的XmlNode,Value
属性将返回null。在XmlNode.Value文档中说明:
空。您可以使用XmlElement.InnerText或XmlElement.InnerXml属性来访问元素节点的值。
因为你的SNILS_V元素似乎只包含一个值InnerText
,所以这里是合适的。
答案 1 :(得分:0)
从XML中选择单个节点。您需要使用SelectSingleNode方法访问该对象。
xml.SelectSingleNode("xpath for node")
获取可以编写的节点集合
xml.SelectNodes("xpath for node collection")
答案 2 :(得分:0)
您应该能够获得如下值:
XmlDocument xml = new XmlDocument();
xml.Load(filename);
Console.WriteLine("this");
XmlNodeList nodes = xml.GetElementsByTagName("OBSV");
foreach (XmlNode n in nodes)
{
Console.WriteLine("in loop");
XmlNode snils_v = n.SelectSingleNode("SNILS_V");
Console.WriteLine("Snils V: " + snils_v.InnerText);
}