繁体   English   中英

Linq2XML查询问题(名称中不接受“:”)

[英]Linq2XML Query problem (not accepting ':' in names)

我有一个具有以下元素的xml文件:

<rs:data>
<z:row entry='*.@foo.de' type='1'/>

我需要使用Linq2Xml访问它们。 我的问题是我得到一个异常,该异常告诉我':'符号不能在名称中使用。

我的Linq2Xml查询是:

var rowQuery = from Mail in whiteMails.Descendants("xml").Descendants("rs:data").Descendants("z:row")
                       select Mail;

我该如何处理?

rs:data是属于命名空间的元素的名称。 “ rs”是名称空间前缀,“ data”是本地名称。 根据您上面的评论,为名称空间URI“ urn:schemas-microsoft-com:rowset”声明rs前缀。 这意味着您的元素被标识为具有本地名称“数据”和名称空间URI“ urn:schemas-microsoft-com:rowset”的元素。 在LINQ to XML中,所有名称都必须通过其名称空间完全限定(这也是XML通常的工作方式)。 在代码中,这是通过使用XNamespace和XName类完成的。 因此,例如:

XNamespace rsNamespace = XNamespace.Get("urn:schemas-microsoft-com:rowset");
XNamespace zNamespace = XNamespace.Get("#RowsetSchema");
var rowQuery = from Mail in whiteMails.Elements("xml")
                                      .Elements(rsNamespace + "data")
                                      .Elements(zNamespace + "row")
               select Mail;

请注意,我使用了Elements而不是Descendants。 (后代也会工作)。 后代将在您调用它的元素的整个子树中以任何深度返回指定名称的所有元素。 Elements将仅返回具有该名称的所有直接子代。 从您的XML和查询看来,您想要直接的子代。 而且Elements比后代要快得多,因为它只需要遍历直接子代,而不需要遍历整个子树。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM