【问题标题】:Select the parent node from child node从子节点中选择父节点
【发布时间】:2020-02-26 20:04:52
【问题描述】:

我有一个 XML 文件,需要找到具有特定描述的节点。代码执行此操作并将其添加到 xmlFINode。但现在我需要选择该节点的父元素(xmlFiNode)。

示例 XML

<dmodule>
<content>
    <faultIsolation>
        <faultIsolationProcedure applicRefId="Software" id="tree1">
            <fault faultCode=" "/>
            <faultDescr>
                <descr>This nodes description</descr>
            </faultDescr>
        </faultIsolationProcedure>
    </faultIsolation>
</content>

代码

    xmlFINode = "dmodule/content/faultIsolation/faultIsolationProcedure/faultDescr[descr='" + selectedItem + "']"
    Dim parentNode = xmlFINode ? 

【问题讨论】:

  • 发布的 XML 不完整。 “有具体描述”是什么意思?
  • 结束标签在哪里开始?
  • 您使用什么库来处理 XML/XPath?大多数会返回带有一些属性/方法的节点对象来访问父节点。

标签: xml vb.net xpath


【解决方案1】:

你可以使用下面的。

//faultIsolation/faultIsolationProcedure[.//descr='This nodes description']

另一个使用祖先的选项。

//descr[.='This nodes description']/ancestor::faultIsolationProcedure

【讨论】:

  • 谢谢你,太好了。我发现我也可以调用 ParentNode
  • 是的,您可以通过多种方式进行操作。喜欢/parent/..,但只是分享了其中一种可能性。如果您的问题得到解决,请接受答案。
【解决方案2】:

将 Xml Linq 与字典一起使用:

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim doc As XDocument = XDocument.Load(FILENAME)

        Dim dict As Dictionary(Of String, List(Of XElement)) = doc.Descendants("faultIsolationProcedure") _
                                                               .GroupBy(Function(x) CType(x.Descendants("descr").FirstOrDefault(), String), Function(y) y) _
                                                               .ToDictionary(Function(x) x.Key, Function(y) y.ToList)



    End Sub

End Module

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多