【问题标题】:Checking if a XML child element exists with Linq to XML使用 Linq to XML 检查 XML 子元素是否存在
【发布时间】:2009-07-28 08:46:13
【问题描述】:

我正试图解决我在 Linq to XML 中遇到的一个问题,看起来应该很简单,但即使在这里浏览了 Linq to XML 问题后,我也无法完全理解。

采取以下 XML 的方式:

<users>
    <user id="1">
        <contactDetails>
            <phone number="555 555 555" />
        </contactDetails>
    </user>
    <user id="2">
        <contactDetails />
    </user>
</users>

我现在想检查 id 为 2 的用户是否有电话号码。

有人可以提出一个解决方案吗,就像我说的那样,它应该很简单......

干杯, 奥拉

【问题讨论】:

    标签: xml linq linq-to-xml


    【解决方案1】:

    这是一个查询方法:

    XElement yourDoc = XElement.Load("your file name.xml");
    
    bool hasPhone = (
        from user in yourDoc.Descendants("user")
        where (int)user.Attribute("id") == 2
        select user.Descendants("phone").Any()
        ).Single();
    

    【讨论】:

      【解决方案2】:

      可能有更好、更巧妙的方法来做到这一点(我对 Linq-to-XML 还不是很熟悉),但是这段代码 sn-p 应该可以工作:

      XElement yourDoc = XElement.Load("your file name.xml");
      
      foreach (XElement user in yourDoc.Descendants("user"))
      {
          foreach(XElement contact in user.Descendants("contactDetails"))
          {
             var phone = contact.Descendants("phone");
      
             bool hasPhone = (phone.Count() > 0);
          }
      }
      

      它基本上枚举了您的 XML 中的所有“用户”节点,然后是用户节点内的所有“contactDetails”节点,然后检查其下是否有任何“电话”子节点。

      .Descendants() 调用将返回 XElement 节点列表,如果没有您查询的类型,则该列表中的 .Count()IEnumerable&lt;T&gt;)将返回 0 - 这就是我的代码正在检查。

      马克

      【讨论】:

        【解决方案3】:

        在 Linq to xml 中,您可以在获取值之前进行此快速检查:

        if (!xe.Root.Element("Date").IsEmpty)
        {
            pd.datefield = System.Convert.ToString(xe.Root.Element("Date").Value);
        }
        

        不适用于数据库中的 NULL 数据,因为它不会创建带有空数据的标签

        为此,您必须遍历子元素

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多