XPath: выбор узла на основе значения другого узла - PullRequest
1 голос
/ 22 сентября 2011

Я пытаюсь использовать одно выражение XPath для выбора узла, у которого есть дочерний узел, который соответствует другому узлу в документе.

Совпадение будет означать, что ALL атрибуты узла одинаковы.Поэтому, если бы узел сравнивался с несколькими атрибутами, выполнение сравнения отдельных атрибутов было бы невозможным.

В качестве примера приведено следующее:

<Network>
    <Machines>
        <Machine Name = "MyMachine">
            <Services>
                 <ServiceDetails Description="MyService" Executable="c:\Myservice.exe" DisplayName="My Service" Version="5"/>
            </Services>
        </Machine>
        ...
    </Machines>
    <Services>
        <Service Name = "Service1">
            <ServiceDetails Description="MyService" Executable="c:\Myservice.exe" DisplayName="My Service" Version="5"/>
        </Service>
        ...
    </Services>
</Network>

Я хочу получитьузел службы из Служб на основе ServiceDetails, перечисленных в MyMachine.

Я думал, что это будет выглядеть примерно так:

//Services/Service[ServiceDetails = //Machines/Machine[@Name='MyMachine']/ServiceDetails]

, но, похоже, он не работаетЯ подозреваю, что оператор '=' неправильно обрабатывает сравнение узлов.Я думаю, что есть некоторые методы XPath 2.0, которые могут работать, но я использую .NET 4.0 (пространство имен System.XML), я не знаю, смогу ли я их использовать.Если бы здесь помогли методы XPath 2.0, я был бы очень признателен за объяснение того, как их использовать в .Net 4.0.

Спасибо

1 Ответ

4 голосов
/ 22 сентября 2011

Используйте

/*/Services/Service
            [ServiceDetails/@Description 
            = 
             /*/Machines/Machine[@Name = "MyMachine"]
                          /Services/ServiceDetails/@Description
            ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...