2016-12-30 6 views
1

У меня есть XDocument new_doc, которая имеет следующий XML какКак проверить, если элемент присутствует при разборе

<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> 

С ниже код, который я пытаюсь получить значение для счета ID

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

Но как проверить, присутствует ли <udf:field type="String" name="Account ID">gt</udf:field>, прежде чем получать значение для ID учетной записи. Потому что иногда XML может быть что-то вроде ниже

<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> 
    </lab:lab> 

ответ

1

Вы можете использовать XPath и проверить, если поле равно нулю или нет ..

var nsmgr = new XmlNamespaceManager(new NameTable()); 
nsmgr.AddNamespace("udf", "http://ge.com/ri/userdefined"); 
var xDoc = XDocument.Load(filename); 

var field = xDoc.XPathSelectElement("//udf:field[@name]", nsmgr); 
if(field != null) 
{ 
    var name = field.Attribute("name"); 
} 

PS: На самом деле //udf:field достаточно. //udf:field[@name] проверяет также наличие имя атрибут. Более ограниченная версия может быть //udf:field[@name='Account ID']

+0

что это имя здесь – trx

+0

@trx ваш xml-файл. Если у вас есть xml в качестве строки, вы можете использовать * XDocument.Parse * –