我的字符串包含
之类的XML标记<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lab:lab xmlns:udf="http://ghjhjhj.com/ri/userdefined"
xmlns:ri="http://kjkj.com/ri"
xmlns:lab="http://iuiuu.com/ri/lab"
uri="https://hhjjhjhj.org/api/v2/labs/1">
<name>Administrative Lab</name>
<billing-address>
<street></street>
<city></city>
<state></state>
<country></country>
<postalCode></postalCode>
<institution></institution>
<department></department>
</billing-address>
<shipping-address>
<street></street>
<city></city>
<state></state>
<country></country>
<postalCode></postalCode>
<institution></institution>
<department></department>
</shipping-address>
<udf:field type="String" name="Account ID">adm</udf:field>
<website></website>
</lab:lab>"
为了只提取值adm,即<udf>
标签之间的任何值,我应该使用XDocument还是XmlDocument.I明白我可以使用XDocument.Parse但是这个我不知道怎么给标签名称。我试过下面的
XDocument new_doc = XDocument.Parse(new_responseString);
var a = from udf in new_doc.Descendants("udf") select udf.Value;
但是将来可能还有其他的udf字段,所以我要检查的是name =&#34; Account ID&#34;我不知道该怎么做
我该如何检索?
答案 0 :(得分:2)
您可以使用Attribute
方法检索XElement
的属性值。
var udf = "http://ghjhjhj.com/ri/userdefined";
var new_doc = XDocument.Parse(new_responseString);
var fieldValues = doc.Descendants(udf + "field")
.Where(field => field.Attribute("name").Value.Equals("Account ID"))
.Select(field => field.Value);
foreach (var value in fieldValues)
{
Console.WriteLine(value);
}
如果您只需要一个值,请使用FirstOrDefault
方法
var fieldValue =
doc.Descendants(udf + "field")
.FirstOrDefault(field => field.Attribute("name").Value.Equals("Account ID"))
.Value;
但请注意 - 此查询将抛出没有属性name = "Account ID"
答案 1 :(得分:1)
可能这可能会为你做到这一点
XNamespace laburi = "http://iuiuu.com/ri/lab";
XNamespace udfuri = "http://ghjhjhj.com/ri/userdefined";
XDocument xdoc = XDocument.Load("some.txt");
var a = xdoc.Elements(laburi + "lab").Elements(udfuri + "field").FirstOrDefault().Value;