Выберите родительский узел из дочернего узла - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть файл XML, и мне нужно найти узел с указанным c описанием. Код делает это и добавляет его в 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 ? 

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Используйте 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
0 голосов
/ 26 февраля 2020

Вы можете использовать ниже.

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

enter image description here

Другой вариант с использованием предка.

//descr[.='This nodes description']/ancestor::faultIsolationProcedure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...