首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在LINQ to XML中应该使用哪种方法而不是子代()?

在LINQ to XML中应该使用哪种方法而不是子代()?
EN

Stack Overflow用户
提问于 2010-08-18 21:56:07
回答 2查看 340关注 0票数 0

我正在开发asp.net移动应用程序。我正在使用XML作为数据库。我使用以下查询来获得所需的输出。在XML文件中,我有一个MIMIC节点的集合&在MIMICS节点中,我有一个SECTION节点的集合。一个或多个截面节点在截面节点I have DATAITEM中包含一个或多个截面节点(嵌套截面节点),如下所示

代码语言:javascript
运行
复制
<MIMIC ID="3" NAME="Network Status">
                <SECTIONS>
                    <SECTION ID="1" NAME="SDA Server 1" HAS-SUBSECTIONS="TRUE">
            <DATAITEM NAME="ABC">XYZ</DATAITEM>
                        <SECTION ID="2" NAME="Top Side">
                            <DATAITEMS>
                                <DATAITEM>Not Available</DATAITEM>
                            </DATAITEMS>
                        </SECTION>
                        <SECTION ID="3" NAME="Subsea" HAS-SUBSECTIONS="TRUE">
                            <SECTION ID="4" NAME="SDA">
                                <DATAITEMS>
                                    <DATAITEM NAME="SEMA">
                                        <ATTRIBUTE NAME="TYPE" VALUE="?" APPEND-TAG-NAME-BY ="?"/>
                                        <ATTRIBUTE NAME="TagName" VALUE="?"/>
                                        <ATTRIBUTE NAME="OPCTagName"  VALUE="?"/>
                                    </DATAITEM>
                                    <DATAITEM NAME="SEMB">
                                        <ATTRIBUTE NAME="TYPE" VALUE="?" APPEND-TAG-NAME-BY ="?"/>
                                        <ATTRIBUTE NAME="TagName" VALUE="?"/>
                                        <ATTRIBUTE NAME="OPCTagName"  VALUE="?"/>
                                    </DATAITEM>
                                </DATAITEMS>
                            </SECTION>
                            <SECTION ID="5" NAME="Manifolds" HAS-SUBSECTIONS="TRUE">

对于上面的XML文件,我使用以下XML查询

代码语言:javascript
运行
复制
string MIMIC_ID = "3";
string SECTION_ID = "1";



var QueryResultSet = from Mimic in FieldRoot.Element("USER-INTERFACE-DEFINITION").Element("MIMICS").Descendants("MIMIC")
                                 .Where(e => e.Attribute("ID").Value == MIMIC_ID)
                                 from DataItem in Mimic.Descendants("SECTION")
                                 .Where(e => e.Attribute("ID").Value == SECTION_ID)
                                 .Descendants("DATAITEM")
                                 select DataItem;

在上面的XML查询中,我只想访问其节ID为2,3,4,5的节节点的DATAITEM节点。但我想这是因为我使用了Mimic.Descendants(“ID=1”)。有没有其他方法可以替代Mimic.Descendants(" SECTION ")方法,使我只能访问其ID=1的SECTION节点的DATAITEM节点?你能提供我解决上述问题的代码或任何链接吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-20 14:49:17

首先,在上面的XML文件中,需要向DATAITEMS &节的每个节点添加ID属性。然后使用以下查询

代码语言:javascript
运行
复制
var QueryResultSet = from Mimic in FieldRoot.Element("USER-INTERFACE-DEFINITION").Element("MIMICS").Descendants("MIMIC")
                                     .Where(e => e.Attribute("ID").Value == MIMIC_ID)
                                     from DataItem in Mimic.Descendants("SECTION")
                                     .Where(e => e.Attribute("ID").Value == SECTION_ID)
                                     .Descendants("DATAITEM").Where(e =>   
                                     e.Parent.Attribute("ID").Value == SECTION_ID)
                                     select DataItem;

在上面的查询中,查询以下部分

.Descendants("DATAITEM").Where(e => e.Parent.Attribute("ID").Value == SECTION_ID)

检查父节点,该节点可以是SECTION节点或DATAITEMS节点。您必须注意,节点节& DATAITEMS必须具有类似的ID。在这两个节点中,节ID充当主键,而DATAITEMS ID充当外键。因此,无论DATAITEM是放在节节点的下面还是放在DATAITEMS节点的下面,上面的查询都会找到所有需要的DATAITEM节点,其中包含条件节ID=1或您想要指定的任何节ID。

票数 0
EN

Stack Overflow用户

发布于 2010-08-18 22:52:50

如果我正确理解了您的输入XML (因为上面的示例实际上没有显示属于ID=1节的DATAITEM子元素(只有嵌套的节具有DATAITEM子元素),那么在您的LINQ查询中而不是.Descendatns(" DATAITEM ")中使用:

代码语言:javascript
运行
复制
.Element("DATAITEMS").Elements("DATAITEM")

子代将遍历您调用的节点的整个子树,并将返回具有指定名称的任何元素,因为您的节是嵌套的,因此它也会查看嵌套的节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3512834

复制
相关文章

相似问题

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