Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 如何使用LINQ检查特定XML节点是否存在_C#_Xml_Linq To Xml - Fatal编程技术网

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

C# 如何使用LINQ检查特定XML节点是否存在,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,由于或标记不存在,我得到一个错误。我试图检查它是否为空,但我的代码不起作用。我得到一个错误: {对象引用未设置为对象的实例。} 代码如下: var networkElement = doc.Root .Element("networkAdapters") .Elements("networkAdapter") .First(a => (string

由于或标记不存在,我得到一个错误。我试图检查它是否为空,但我的代码不起作用。我得到一个错误:

{对象引用未设置为对象的实例。}

代码如下:

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");
当您的文档中没有non时,它将创建为空,以便让ElementsdnsServer查询毫无例外地工作

您可以将其作为一个班轮:

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

您的XML看起来怎么样?刚刚发布。有时我们收到的文件中没有井内的标签,我需要能够检查是否有任何IP地址,换句话说,以验证我们是否有标签。我也是。我在这个xml文件中注意到的一点是,我有标记,但没有,所以我需要找到一个逻辑来检查我是否有任何IPAddress或DNSServer。当它应该为NULL时,它返回NOTNULL,因为我在文件中没有DNSServer。我错过什么了吗?thanksIt在没有元素时返回空集合。但要澄清的是:您需要元素列表还是只需要一个元素/null?好吧,我需要能够检查是否有任何IPAddress,换句话说,以验证是否有标记。我也是。我在这个xml文件中注意到的一点是,我有标记,但没有,因此我需要找到一个逻辑来检查我是否有任何IPAddress或DNSServer。-谢谢你,你的建议很好,只是意识到这是一个空的收藏,对不起…非常感谢