C# Linq2XML查询问题(不接受名称中的';:';)

C# Linq2XML查询问题(不接受名称中的';:';),c#,linq-to-xml,C#,Linq To Xml,我有一个xml文件,其中包含以下元素: <rs:data> <z:row entry='*.@foo.de' type='1'/> 如何处理此问题?rs:data是属于命名空间的元素的名称。“rs”是名称空间前缀,“data”是本地名称。根据上面的注释,rs前缀是为名称空间URI“urn:schemas-microsoft-com:rowset”声明的。这意味着您的元素被标识为具有本地名称“data”和命名空间URI“urn:schemas-microsoft-com:

我有一个xml文件,其中包含以下元素:

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

如何处理此问题?

rs:data是属于命名空间的元素的名称。“rs”是名称空间前缀,“data”是本地名称。根据上面的注释,rs前缀是为名称空间URI“urn:schemas-microsoft-com:rowset”声明的。这意味着您的元素被标识为具有本地名称“data”和命名空间URI“urn:schemas-microsoft-com:rowset”的元素。在LINQtoXML中,所有名称都需要由名称空间完全限定(这也是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;
请注意,我使用了元素而不是子体。(后代也会工作)。子体将返回您调用它的元素的整个子树中指定名称的所有元素(任何深度)。元素将只返回具有该名称的所有直接子元素。从XML和查询中,似乎需要直接的子对象。
此外,元素比子元素快得多,因为它只需要遍历直接的子元素,而不需要遍历整个子树。

在XML中,我认为:用于指向特定的名称空间,我想这就是为什么不能使用它的原因。在根元素中是否有xmlns:rs或xmlns:z属性?试着只搜索“数据”或“行”,看看是否可行。否则,如果您创建了这样的名称,您可能需要更改。是的,我发现它是一个名称空间。。。我的定义很像xmlns:rs='urn:schemas microsoft com:rowset'xmlns:z='#RowsetSchema',但我找不到如何处理它们:(如果我只是查找“数据”或“行”,它什么也找不到是的,我自己也不确定,那么派生(“数据”)呢。其中(d=>d.NameSpaceURI==“thenamepsace”)。派生……哇,非常好的描述:))(非常感谢,它很管用
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;