【问题标题】:Check if XElement(Record) exists?检查 XElement(Record) 是否存在?
【发布时间】:2014-01-18 14:19:14
【问题描述】:

如何检查XElement 是否有 Record 和 INVID 属性? 我的函数只返回单个 XElement。即,

<INVENTORY>
  <Record>
    <INVID>1315</INVID>
    <INVNAME>TEST LOCATIONTEST</INVNAME>
    <HOSPNAME>TEST LOCATION</HOSPNAME>
    <INVTYPE>CLINICAL</INVTYPE>
    <INVDT>2013-09-30T09:30:00</INVDT>
    <INVDEF>YES</INVDEF>
    <INVACT>YES</INVACT>
    <UPDDTTM />
    <UPDUSR />
    <ENBREF>true</ENBREF>
    <INVPWD>101315</INVPWD>
  </Record>
</INVENTORY>


XElement xInventory = GetDefaultInventory();        
bool hasInventory = xInventory.Elements("INVID").Any();  //What to do here ? 

if (hasInventory)
{  
    //TO DO Some action 
}

【问题讨论】:

    标签: c# linq linq-to-xml


    【解决方案1】:

    如果你想检查inventory元素有Record元素和INVID子元素,那么你可以使用XPath:

    XElement inventory = GetDefaultInventory();
    XElement invid = inventory.XPathSelectElement("Record/INVID");
    if (invid == null) 
        // not exist
    

    或LINQ方式:

    bool exists = inventory.Elements("Record").Elements("INVID").Any();
    

    【讨论】:

    • 我尝试使用 LINQ,工作正常!谢谢@Sergey Berezovskiy
    【解决方案2】:

    这个怎么样:

    bool hasInventory = xInventory.Elements("Record").Any() && xInventory.Descendants("INVID").Any();
    

    这将检查xInventory 元素是否有直接子元素Record,如果有则检查xInventory 是否有子元素INVID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2018-09-10
      相关资源
      最近更新 更多