将xml粘贴到控制台

时间:2017-12-05 08:10:51

标签: c# xml

我需要从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获取信息?

3 个答案:

答案 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);
}