【问题标题】:Query for unique id with XDocument使用 XDocument 查询唯一 ID
【发布时间】:2015-05-01 06:17:13
【问题描述】:

我有以下 XML 名称 Sample.xml,我正在尝试使用 XDocument 查询 uniqueID:

<Request>
<Person xmlns="http://CompanyName.AppName.version1" uniqueID="3221">
    <AccountNo>83838</AccountNo>
    <FirstName>Tom</FirstName>
    <LastName>Jackson</LastName>
</Person>
<Person xmlns="http://CompanyName.AppName.version1" uniqueID="21132">
    <AccountNo>789875</AccountNo>
    <FirstName>Chris</FirstName>
    <LastName>Smith</LastName>
</Person>
</Request>

我如何编写代码来提取所有人的唯一 ID。

【问题讨论】:

    标签: c# xml linq linq-to-xml xml-namespaces


    【解决方案1】:

    您可以使用 LINQ to XML 从您的 XML 文档中检索唯一 ID。

    string xml = "<Request><Person xmlns='http://CompanyName.AppName.version1' uniqueID='3221'><AccountNo>83838</AccountNo><FirstName>Tom</FirstName><LastName>Jackson</LastName></Person><Person xmlns='http://CompanyName.AppName.version1' uniqueID='21132'><AccountNo>789875</AccountNo><FirstName>Chris</FirstName><LastName>Smith</LastName></Person></Request>";
    
    XDocument doc = XDocument.Parse(xml);
    XNamespace ns = "http://CompanyName.AppName.version1";
    var uniqueIDs = doc.Descendants(ns + "Person")
                       .Select(p => p.Attribute("uniqueID").Value)
                       .ToList();
    

    【讨论】:

      【解决方案2】:

      使用 XmlDocument 尝试下面的代码

      string xml = "<Request><Person xmlns='http://CompanyName.AppName.version1' uniqueID='3221'><AccountNo>83838</AccountNo><FirstName>Tom</FirstName><LastName>Jackson</LastName></Person><Person xmlns='http://CompanyName.AppName.version1' uniqueID='21132'><AccountNo>789875</AccountNo><FirstName>Chris</FirstName><LastName>Smith</LastName></Person></Request>";
      
      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.LoadXml(xml);
      XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Person");
      
      foreach (XmlNode node in nodeList)
      {
          Console.WriteLine(node.Attributes["uniqueID"].Value);
      }
      

      【讨论】:

      • 如果Person 元素之一没有uniqueID 属性会怎样?
      • 您的问题有效。这只是示例 sn-p,我没有涵盖所有例外情况。用户可以根据需要修改代码。
      【解决方案3】:

      您可以通过以下方式获取唯一 ID:

      string xml="Your XML String";
      XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(xml));
      XmlDocument doc = new XmlDocument();
      XmlNode node = doc.ReadNode(reader);
      
      foreach (XmlNode chldNode in node.ChildNodes)
      {
          if (chldNode.HasChildNodes)
          {
              foreach (XmlNode item in node.ChildNodes)
              {
                  string uniqueID = chldNode.Attributes["uniqueID"].Value;
                  Response.Write(employeeName + "<br />");
              }
          }
      }
      

      【讨论】:

      • 仅供参考,您不应使用new XmlTextReader()new XmlTextWriter()。自 .NET 2.0 以来,它们已被弃用。请改用XmlReader.Create()XmlWriter.Create()
      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多