我有一个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;
但是如何在获取帐户ID的值之前检查<udf:field type="String" name="Account ID">gt</udf:field>
是否存在。因为有时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>
答案 0 :(得分: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]
还会检查 name 属性是否存在。其受限制的版本可以是//udf:field[@name='Account ID']