获得包含“:”的后代节点?

时间:2012-10-09 09:40:16

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

我已将XML加载到XDocument中,看起来像这样:

<MyXML xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyApp.Client.Main.GUI.Report">
  <Wrapper xmlns:d2p1="http://schemas.datacontract.org/2004/07/MyApp.Business.Entity">
    <d2p1:_MultipelAttributId>156</d2p1:_MultipelAttributId>
  </Wrapper>
</MyXML>

现在我需要获取_MultipelAttributId的值,但在说明时:

XElement element = (from cml2 in doc.Descendants("d2p1:_MultipelAttributId") select cml2).FirstOrDefault();

我对“:”有例外吗?

那么如何获得价值?

3 个答案:

答案 0 :(得分:3)

XNamespace ns = "http://schemas.datacontract.org/2004/07/MyApp.Business.Entity"; 

var element = xDoc.Descendants(ns + "_MultipelAttributId").FirstOrDefault();

答案 1 :(得分:1)

您查询的元素名称不正确。试试这个:

XElement element = (
    from cml2 in doc.Descendants()
    where cml2.Name.LocalName == "_MultipelAttributId"
    select cml2).FirstOrDefault();

答案 2 :(得分:1)

这篇MSDN文章解释了如何使用Linq to XML中的命名空间 http://msdn.microsoft.com/en-us/library/bb669152.aspx

XNamespace d2p1 = "http://schemas.datacontract.org/2004/07/MyApp.Business.Entity";
XElement multipelAttributId = doc.Descendants(d2p1 + "_MultipelAttributId").FirstOrDefault();

请注意,您可以从字符串中巧妙地创建XNamespace或XName,因为Microsoft已为这些类型编写了隐式转换。