繁体   English   中英

如何使用LINQ检查特定的XML节点是否存在

[英]How to check if a particular XML node exists by using LINQ

由于"<dnsServer>""<dnsServers>"标签不存在,因此出现错误。 我正在尝试检查它是否为空,但是我的代码无法正常工作。 我得到错误:

{“你调用的对象是空的。”}

这是代码:

var networkElement = doc.Root
                        .Element("networkAdapters")
                        .Elements("networkAdapter")
                        .First(a => (string)a.Attribute("id") == networkAdapter.networkAdapterId.ToString());

var dnsServers = networkElement.Element("dnsServers")
                               .Elements("dnsServer") == null ? null : networkElement.Element("dnsServers").Elements("dnsServer");

和XML示例:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<server id="454a8a22-8e9e-4023-9a8e-c8a4e0f259b3" productName="Manifest" created="2014-01-16T22:07:28" name="SERVER001">
  <networkAdapters>
    <networkAdapter id="bfcbda99-719c-4b0c-b7b2-b9167350c982" busLocation="0-N2" permanentMacAddress="00144FE5448E" physicalAdapter="True" ipEnabled="False">
      <defaultGateways />
      <ipAddresses />
    </networkAdapter>
    <networkAdapter id="73606723-fd91-40df-96dd-0bff7851cea6" ipEnabled="True">
      <defaultGateways>
        <defaultGateway address="99.15.210.1" index="0" />
      </defaultGateways>
      <ipAddresses>
        <ipAddress address="99.15.210.7" subnetMask="255.255.255.224" index="0" />
      </ipAddresses>
    </networkAdapter>
    <networkAdapter id="6520a041-2cf3-40b1-b123-1eb13f704442" busLocation="0-N3" permanentMacAddress="00144FE5448F" physicalAdapter="True" ipEnabled="False">
      <defaultGateways />
      <ipAddresses />
    </networkAdapter>
  </networkAdapters>
</server>

谢谢

请尝试以下操作:

var servers = networkElement.Element("dnsServers") ?? new XElement("dnsServers");
var dnsServers = servers.Elements("dnsServer");

当文档中没有任何内容时,它将创建空的<dnsServers> ,以使Elements("dnsServer")查询无例外地工作。

您可以单线执行此操作:

var dnsServers = (networkElement.Element("dnsServers") ?? new XElement("dnsServers")).Elements("dnsServer");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM