2016-12-30 8 views
1

У меня есть ответ XML в API, который выглядит, как показано нижеОбработка узлов, что делает существует при разборе

<lab:lab uri="https://bh03.org/api/lb/3" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab"> 
    <name>GTech</name> 
    <udf:field type="String" name="Account ID">gt</udf:field> 
</lab:lab> 

Я хочу, чтобы получить значение «GT» в учетной записи ID из XML поэтому я использую XDocument Разбор и используя код ниже

XDocument new_doc = XDocument.Parse(responseString_LabURL); 
XNamespace ns = "http://ge.com/ri/userdefined"; 
string accountID = new_doc.Descendants(ns + "field").FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")).Value; 

Но иногда не будет в XML нет <udf:field type="String" name="Account ID">gt</udf:field> и может выглядеть ниже

<lab:lab uri="https://bh03.org/api/v2/labs/1302" xmlns:udf="http://ge.com/ri/userdefined" xmlns:ri="http://ge.com/ri" xmlns:lab="http://ge.com/ri/lab"> 
    <name>lsd</name> 
</lab:lab> 

Как обращаться, когда нет поля.

+0

Два предложения 1) Не используйте «строка», как использовать тип вар Строка не любит нулевые значения 2) Дон.. 't использовать значение, которое как дает ошибки, когда null. Вместо этого попробуйте следующее: string accountID = new_doc.Descendants (ns + "field"). Где (field => field.Attribute ("name")! = null). Выберите (x => (string) field.Attribute ("name")). FirstOrDefault(); – jdweng

ответ

1

Я бы начал тестирование, если существует элемент <udf:field></udf:field>. Как это:

string accountID; 
XDocument new_doc = XDocument.Parse(responseString_LabURL); 
XNamespace ns = "http://ge.com/ri/userdefined"; 

if (new_doc.Descendants(ns + "field").Any()) 
{ 
    accountID = new_doc.Descendants(ns + "field").FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")).Value; 
} 
else 
{ 
    accountID = null; // or whatever 
} 

Стенография для приведенного выше кода:

accountID = new_doc.Descendants(ns + "field").Any() ? new_doc.Descendants(ns + "field").FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID")).Value : null;