【问题标题】:Extract the XML value in to string c#将 XML 值提取到字符串 c#
【发布时间】:2016-12-23 04:31:08
【问题描述】:

我有一个带有类似 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 即 &lt;udf&gt; 标记之间的任何值,我应该使用 XDocument 还是 XmlDocument。我知道我可以使用 XDocument.Parse 但这我不知道如何给出标记名称.我在下面尝试过

  XDocument new_doc = XDocument.Parse(new_responseString);
  var a = from udf in new_doc.Descendants("udf") select udf.Value;

但将来可能会有额外的 udf 字段,所以我要检查的应该是 name="Account ID",我不知道该怎么做

我怎样才能找回这个?

【问题讨论】:

  • 你能分享你完整的 XML 或更大的部分吗?到目前为止你有什么尝试?
  • 可能重复。请参考此answer。希望这会有所帮助。
  • @MohitShrivastava 我已经编辑了整个字符串。我知道我可以使用 XDocument.Parse 但这我不知道如何给标签名称
  • @MohitShrivastava 请帮帮我。我已经添加了我尝试过的内容以及完整的字符串是什么

标签: c# xml xml-parsing


【解决方案1】:

您可以使用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" 的元素

【讨论】:

  • 谢谢法比奥。但是如何将 udfValues 转换为字符串。
  • @Sid - udfValues 的类型为 IEnumerable&lt;string&gt;。如果您只期望一个值,请在 Select 方法 - FirstOrDefault() 方法之后添加到查询中。
  • 它在.Value();中显示Non-invocable member 'System.Xml.Linq.XElement.Value' cannot be used like a method.
  • 错误信息说得很清楚:)。只需删除前缀 -> .Value. Fixed in answer
  • 对不起,我对此完全陌生。在调试中,我在同一行中说 {"Object reference not set to an instance of an object."} 时遇到问题
【解决方案2】:

也许这对你有用

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2013-05-02
    • 2013-07-22
    相关资源
    最近更新 更多