如何使用c#在XML文件中获取节点值

时间:2016-07-01 08:00:18

标签: c# xml

我有一个XML文件,在这个XML中你可以看到RESPONSE_DATA标记。此标记包含更多内部标记。我需要获取PERSON_DATA标记内的所有值。此外,我需要在下面的xml文件中获取所有其他值。

<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n
<HUMAN_VERIFICATION xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <RESPONSE_DATA>
      <RESPONSE_STATUS>
         <ERROR>100</ERROR>
         <MESSAGE>successful</MESSAGE>
      </RESPONSE_STATUS>
      <CONTACT_NUMBER>3120202456011</CONTACT_NUMBER>
      <PERSON_DATA>
         <NAME>Alex</NAME>
         <DATE_OF_BIRTH>10-9-1982</DATE_OF_BIRTH>
         <BIRTH_PLACE>Washington</BIRTH_PLACE>
         <EXPIRY>2020-12-15</EXPIRY>
      </PERSON_DATA>
      <CARD_TYPE>idcard</CARD_TYPE>
   </RESPONSE_DATA>
</HUMAN_VERIFICATION>

4 个答案:

答案 0 :(得分:3)

我更喜欢将Linq用于Xml

var results = doc.Descendants("PERSON_DATA")      // Flatten the hierarchy and look for PERSON_DATA                
    .Select(x=> new 
            {
                NAME = (string)x.Element("NAME"),
                DATE_OF_BIRTH = (string)x.Element("DATE_OF_BIRTH"),
                BIRTH_PLACE = (string)x.Element("BIRTH_PLACE"),
                EXPIRY = (string)x.Element("EXPIRY"),
            });

检查Demo

答案 1 :(得分:2)

您可以尝试使用此代码,它可能会对您有所帮助。

settings.gradle

答案 2 :(得分:0)

使用System.Xml.Linq非常简单直观。

var xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<HUMAN_VERIFICATION xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <RESPONSE_DATA>\r\n    <RESPONSE_STATUS>\r\n      <ERROR>100</ERROR>\r\n      <MESSAGE>successful</MESSAGE>\r\n    </RESPONSE_STATUS>\r\n    <CONTACT_NUMBER>3120202456011</CONTACT_NUMBER>\r\n    <PERSON_DATA>\r\n      <NAME>Alex</NAME>\r\n     <DATE_OF_BIRTH>10-9-1982</DATE_OF_BIRTH>\r\n      <BIRTH_PLACE>Washington</BIRTH_PLACE>\r\n      <EXPIRY>2020-12-15</EXPIRY>\r\n    </PERSON_DATA>\r\n    <CARD_TYPE>idcard</CARD_TYPE>\r\n  </RESPONSE_DATA>\r\n</HUMAN_VERIFICATION>";
var document = XDocument.Parse(xml);
var name = document.Element("HUMAN_VERIFICATION").Element("RESPONSE_DATA").Element("PERSON_DATA").Element("NAME").Value;

OR

var personData = document.Element("HUMAN_VERIFICATION").Element("RESPONSE_DATA").Element("PERSON_DATA").Elements().ToDictionary(e => e.Name.ToString(), e => e.Value);

答案 3 :(得分:-1)

试试这个:

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); // suppose that myXmlString contains "<Names>...</Names>"

XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
  string firstName = xn["FirstName"].InnerText;
  string lastName = xn["LastName"].InnerText;
  Console.WriteLine("Name: {0} {1}", firstName, lastName);
}