首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Linq- to -XML查询中仅使用本地名称检索元素?

有没有办法在Linq- to -XML查询中仅使用本地名称检索元素?
EN

Stack Overflow用户
提问于 2008-10-06 19:48:17
回答 3查看 3.9K关注 0票数 9

让我们假设我们有这样的xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<tns:RegistryResponse status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Failure"
    xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"
    xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0">
    <tns:RegistryErrorList highestSeverity="">
        <tns:RegistryError codeContext="XDSInvalidRequest - DcoumentId is not unique."
            errorCode="XDSInvalidRequest"
            severity="urn:oasis:names:tc:ebxml-regrep:ErrorSeverityType:Error"/>
    </tns:RegistryErrorList>
 </tns:RegistryResponse>

要检索RegistryErrorList元素,我们可以这样做

代码语言:javascript
复制
XDocument doc = XDocument.Load(<path to xml file>);
XNamespace ns = "urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0";
XElement errorList = doc.Root.Elements( ns + "RegistryErrorList").SingleOrDefault();

但不是这样的

代码语言:javascript
复制
XElement errorList = doc.Root.Elements("RegistryErrorList").SingleOrDefault();

有没有办法在没有元素命名空间的情况下执行查询。基本上,在概念上是否类似于在XPath中使用local-name() (即//*local-name()='RegistryErrorList')

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-06 19:54:28

代码语言:javascript
复制
var q = from x in doc.Root.Elements()
        where x.Name.LocalName=="RegistryErrorList"
        select x;

var errorList = q.SingleOrDefault();
票数 8
EN

Stack Overflow用户

发布于 2008-10-07 13:14:10

在"method“语法中,查询将如下所示:

代码语言:javascript
复制
XElement errorList = doc.Root.Elements().Where(o => o.Name.LocalName == "RegistryErrorList").SingleOrDefault();
票数 2
EN

Stack Overflow用户

发布于 2015-11-20 23:57:13

下面的扩展将从XDocument (或任何XContainer)的任何级别返回匹配元素的集合。

代码语言:javascript
复制
     public static IEnumerable<XElement> GetElements(this XContainer doc, string elementName)
    {
        return doc.Descendants().Where(p => p.Name.LocalName == elementName);
    }

您的代码现在将如下所示:

代码语言:javascript
复制
var errorList = doc.GetElements("RegistryErrorList").SingleOrDefault();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/175891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档