【问题标题】:Linq: read node innertextLinq:读取节点内文
【发布时间】:2010-06-04 05:33:08
【问题描述】:

我有一个这样的 xml 文档:

<ns:a xmlns:ns="http://NS1">
  <ns:b>
    <c xmlns="http://differentNS"> c_text </c>
    <x xmlns="http://differentNS"> Wanted </x>
    <d xmlns="http://differentNS"> d_text </d>
  </ns:b>
</ns:a>

现在我想使用 linq 读取元素的“x”内部文本。

【问题讨论】:

    标签: .net xml linq linq-to-xml


    【解决方案1】:

    这是一个使用 LINQ to XML 的可能实现:

    var doc = XDocument.Parse("<ns:a xmlns:ns='http://NS1'><ns:b><c xmlns='http://differentNS'>c_text</c><x xmlns='http://differentNS'>Wanted</x><d xmlns='http://differentNS'>d_text</d></ns:b></ns:a>");
    
    XNamespace ns = "http://differentNS";
    var result = doc.Descendants(ns + "x").Single().Value
    

    相关资源:

    【讨论】:

    • doc.Descendants 返回一个没有 Value 属性的 IEnumerable。我应该做什么演员?
    • 你是对的。您需要选择列表中的单个 XElement 才能提取值。我更新了我的答案。
    【解决方案2】:

    你应该可以做这样的事情:

    var xDocument = XDocument.Load(yourdocumenthere);
    var myvalue = xDocument.Element("ns:a").element("ns:b").element("c").value;
    

    这里没有使用链接,但还是很简单的。

    【讨论】:

    • 是的,它很简单,但只适用于没有命名空间。如果我写“ns:a”,我会收到异常“':' 字符,十六进制值 0x3A,不能包含在名称中。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多