C# 在LINQ to XML中应该使用哪个方法而不是子体()?

C# 在LINQ to XML中应该使用哪个方法而不是子体()?,c#,asp.net,xml,linq-to-xml,lambda,C#,Asp.net,Xml,Linq To Xml,Lambda,我正在开发asp.net移动应用程序。我使用XML作为数据库。我使用以下查询来获得所需的输出。在XML文件中,我有模拟节点的集合&在模拟节点中,我有部分节点的集合。一个或多个节节点包含一个或多个节节点嵌套在节节点中的节节点I have DATAITEM如下 <MIMIC ID="3" NAME="Network Status"> <SECTIONS> <SECTION ID="1" NAME="

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

<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查询中,我只想访问ID为1的节节点的DATAITEM节点。但是我得到了所有的DATAITEM节点,它的节ID是2,3,4,5。我想这是因为我使用了Mimic.genderantsSection。是否有其他方法可以替代Mimic.genderantsSection方法,以便我只能访问ID为1的节节点的DATAITEM节点?如果我正确理解了您的输入XML,因为上面的示例实际上没有显示属于节ID=1的数据项子项,只有嵌套的节具有数据项子项,那么您可以提供代码或任何链接来解决上述问题吗

.Element("DATAITEMS").Elements("DATAITEM")

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

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

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;
在上面的查询中,以下部分

.DegenantsDataItem.Wheree=>e.Parent.AttributeID.Value==节ID

检查父节点(可以是节节点或数据项节点)。必须注意节点节和数据项必须具有相似的ID。在这两个节点中,节ID用作主键,而数据项ID用作外键。因此,无论是将DATAITEM放置在SECTION节点下还是DATAITEMS节点下,上面的查询都会找到条件SECTION ID=1或任何要指定的SECTION ID的所有必需DATAITEM节点

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;