将XML值提取到字符串c#中

时间:2016-12-23 04:31:08

标签: c# xml xml-parsing

我的字符串包含

之类的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;我不知道该怎么做

我该如何检索?

2 个答案:

答案 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;