C# 将xml粘贴到控制台

C# 将xml粘贴到控制台,c#,xml,C#,Xml,我需要从XML文件中获取数据SHILS\u V。我读了.xml XML代码,例如: <SVED_PR_GS> <ZGLV> <VERSION>99</VERSION> <DATA>9999</DATA> <FILENAME>1234</FILENAME> <FIRSTNAME>

我需要从XML文件中获取数据SHILS\u 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获取信息?

从XML中选择单个节点。您需要使用SelectSingleNode方法访问该对象

xml.SelectSingleNode("xpath for node")
要获取节点集合,可以编写

xml.SelectNodes("xpath for node collection")

GetElementsByTagName
需要一个标记名,而不是XPath表达式,“SV_PR_GS”将在那里工作。XmlNode实例名为n的索引器也是如此,这个XPath将无法工作
n[“OBSV/SNILS\u 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);
}
请注意,
Value
属性将为XmlElement类型的XmlNode返回null。文件中规定:

空。可以使用XmlElement.InnerText或XmlElement.InnerXml属性访问元素节点的值


由于SNILS\u V元素似乎只包含一个值,因此
InnerText
在这里是合适的。

您应该能够获得如下值:

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

请尝试
snils\u v.value
。。。