首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有参数的子代()返回空结果

带有参数的子代()返回空结果
EN

Stack Overflow用户
提问于 2019-08-16 17:31:28
回答 1查看 38关注 0票数 0

在XElement hwLibs中使用以下XML。

代码语言:javascript
运行
复制
<ConnectedHardwareLibraries xmlns="CBOpenIFSchema3_0">
    <ConnectedHardwareLibrary Name="BasicHwLib" MajorVersion="6" MinorVersion="0" Revision="0" FilePath="HWLibraries:" />
    <ConnectedHardwareLibrary Name="CI854PROFIBUSHwLib" MajorVersion="2" MinorVersion="11" Revision="40" FilePath="HWLibraries:" />
</ConnectedHardwareLibraries>

我希望获得具有Name="CI854PROFIBUSHwLib"属性的库元素。

代码语言:javascript
运行
复制
<ConnectedHardwareLibrary Name="CI854PROFIBUSHwLib" MajorVersion="2" MinorVersion="11" Revision="40" FilePath="HWLibraries:" />

通过以下查询,将呈现预期的结果。

代码语言:javascript
运行
复制
IEnumerable<XElement> x =
    from item in hwLibs.Descendants()
    where item.Attribute("Name").Value.Equals("CI854PROFIBUSHwLib")
    select item;

但是下面的代码返回一个空结果。

代码语言:javascript
运行
复制
IEnumerable<XElement> x =
    from item in hwLibs.Descendants("ConnectedHardwareLibrary")
    where item.Attribute("Name").Value.Equals("CI854PROFIBUSHwLib")
    select item;

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 17:45:59

您的示例XML文档有一个默认名称空间"CBOpenIFSchema3_0“。这意味着文档的所有元素都将具有该名称空间,如果没有另外指定的话。

因此,这就是为什么当您使用Descendants方法指定一个包含本地元素名称"ConnectedHardwareLibrary“且没有名称空间的参数时,它将不匹配任何内容。

您可以将代码更改为使用包含命名空间的元素名称进行查询,如下所示:

代码语言:javascript
运行
复制
IEnumerable<XElement> x =
    from item in hwLibs.Descendants("{CBOpenIFSchema3_0}ConnectedHardwareLibrary")
    where item.Attribute("Name").Value.Equals("CI854PROFIBUSHwLib")
    select item;

或者,还有其他几种不同的语法可以做同样的事情:

代码语言:javascript
运行
复制
XNamespace ns = "CBOpenIFSchema3_0";
IEnumerable<XElement> x =
    from item in hwLibs.Descendants(ns + "ConnectedHardwareLibrary")
    where item.Attribute("Name").Value.Equals("CI854PROFIBUSHwLib")
    select item;
代码语言:javascript
运行
复制
IEnumerable<XElement> x =
    from item in hwLibs.Descendants(XName.Get("ConnectedHardwareLibrary","CBOpenIFSchema3_0")
    where item.Attribute("Name").Value.Equals("CI854PROFIBUSHwLib")
    select item;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57522197

复制
相关文章

相似问题

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