0

我已经将一个 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();

我对“:”有异常?

那么我如何获得价值呢?

4

3 回答 3

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

var element = xDoc.Descendants(ns + "_MultipelAttributId").FirstOrDefault();
于 2012-10-09T10:19:10.547 回答
1

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

XElement element = (
    from cml2 in doc.Descendants()
    where cml2.Name.LocalName == "_MultipelAttributId"
    select cml2).FirstOrDefault();
于 2012-10-09T10:13:40.193 回答
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 已经为这些类型编写了隐式转换。

于 2012-10-09T10:25:45.583 回答