Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取属性和嵌套XML_C#_Xpath_Xml Parsing - Fatal编程技术网

C# 如何读取属性和嵌套XML

C# 如何读取属性和嵌套XML,c#,xpath,xml-parsing,C#,Xpath,Xml Parsing,请帮助我解决这个问题,如何读取属性和嵌套XML。我不理解这个原理,我想用真实的例子来教这个 源xml: <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns:listUserResponse xmlns:ns="http://ww

请帮助我解决这个问题,如何读取属性和嵌套XML。我不理解这个原理,我想用真实的例子来教这个

源xml:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <ns:listUserResponse xmlns:ns="http://www.cisco.com/AXL/API/11.5">
      <return>
        <user uuid="{A00B47CC-0C4F-40E7-1E25-22E54FBA4596}">
          <firstName>Name1</firstName>
          <middleName />
          <lastName>Surname1</lastName>
          <primaryExtension>
            <pattern>201</pattern>
          </primaryExtension>
        </user>
        <user uuid="{834E86FA-FDC2-21FE-1E1E-FD164AF23B44}">
          <firstName>Name2</firstName>
          <middleName />
          <lastName>Surname2</lastName>
          <primaryExtension>
            <pattern>202</pattern>
          </primaryExtension>
        </user>
        <user uuid="{798E04E7-0E10-0278-6FAD-EA6A85EF2B2E}">
          <firstName>Name3</firstName>
          <middleName />
          <lastName>Surname3</lastName>
          <primaryExtension>
            <pattern>203</pattern>
          </primaryExtension>
        </user>
      </return>
    </ns:listUserResponse>
  </soapenv:Body>
</soapenv:Envelope>
谢谢你,并致以最良好的祝愿,
你可以用这样的东西

foreach (XmlNode xn in xnList)
    {
        string uuid = (xn as XmlElement).GetAttribute("uuid");
        string firstName = xn.SelectSingleNode("./firstName").InnerText;
        string middleName= xn.SelectSingleNode("./middleName").InnerText;
        string lastName = xn.SelectSingleNode("./lastName").InnerText;
        string primaryExtensionPattern = xn.SelectSingleNode("./primaryExtensionPattern /pattern").InnerText;

        ...
    }

或者您可以考虑使用LINQ到XML并使用XBelf。对我来说,解析xml似乎更容易

试试xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable datatableListUser = new DataTable();
            datatableListUser.Clear();
            datatableListUser.Columns.Add("uuid");
            datatableListUser.Columns.Add("firstName", typeof(string));
            datatableListUser.Columns.Add("middleName", typeof(string));
            datatableListUser.Columns.Add("lastName", typeof(string));
            datatableListUser.Columns.Add("primaryExtensionPattern", typeof(int));

            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement user in doc.Descendants("user"))
            {
                datatableListUser.Rows.Add(new object[] {
                   (string)user.Attribute("uuid"),
                   (string)user.Element("firstName"),
                   (string)user.Element("middleName"),
                   (string)user.Element("lastName"),
                   (int)user.Descendants("pattern").FirstOrDefault()
                });
            }

        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable datatableListUser = new DataTable();
            datatableListUser.Clear();
            datatableListUser.Columns.Add("uuid");
            datatableListUser.Columns.Add("firstName", typeof(string));
            datatableListUser.Columns.Add("middleName", typeof(string));
            datatableListUser.Columns.Add("lastName", typeof(string));
            datatableListUser.Columns.Add("primaryExtensionPattern", typeof(int));

            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement user in doc.Descendants("user"))
            {
                datatableListUser.Rows.Add(new object[] {
                   (string)user.Attribute("uuid"),
                   (string)user.Element("firstName"),
                   (string)user.Element("middleName"),
                   (string)user.Element("lastName"),
                   (int)user.Descendants("pattern").FirstOrDefault()
                });
            }

        }
    }
}