2014-01-16 6 views
0

Поскольку теги "<dnsServer>" или "<dnsServers>" не существуют, я получаю сообщение об ошибке. Я пытаюсь проверить, является ли это null, но мой код не работает. Я получаю ошибку:Как проверить, существует ли конкретный узел XML, используя LINQ

{"Object reference not set to an instance of an object."}

Вот код:

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> 

Спасибо

+0

Как ваш XML выглядит? – MarcinJuraszek

+0

только что опубликовал. Иногда мы получаем файл без тега , который находится внутри Max

+0

ну, мне нужно проверить, есть ли какие-либо ipAddresses, другими словами, чтобы проверить, есть ли у нас тег . То же самое для . Одна вещь, которую я заметил в этом XML-файле, это то, что у меня есть тег , но не , поэтому мне нужно найти логику, чтобы проверить, есть ли у меня какие-либо ipAddresses или dnsServers. – Max

ответ

0

Попробуйте следующее:

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"); 
+0

Он возвращает NOT NULL, когда он должен быть пустым, так как у меня нет «dnsServers» в файле. Я что-то упускаю? thanks – Max

+0

Он возвращает пустую коллекцию, когда нет элемента. Но чтобы все было ясно: вам нужен список '' элементов или только один '' elements/'null'? – MarcinJuraszek

+0

хорошо, мне нужно проверить, есть ли какие-либо ipAddresses, другими словами, чтобы проверить, есть ли у нас тег . То же самое для . Одна вещь, которую я заметил в этом XML-файле, это то, что у меня есть тег , но не , поэтому мне нужно найти логику, чтобы проверить, есть ли у меня какие-либо ipAddresses или dnsServers. - спасибо – Max

Смежные вопросы