Я пытаюсь использовать одно выражение XPath для выбора узла, у которого есть дочерний узел, соответствующий другому узлу в документе.
Совпадение будет означать, что ВСЕ атрибуты узла совпадают. Таким образом, если узел сравнивался с несколькими атрибутами, сравнение отдельных атрибутов было бы невозможным.
В качестве примера приведено следующее:
<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.
Спасибо
<Service>
под<Services>
, сопоставляя атрибуты@Description
из обоих<ServiceDetails>
? (В этом случае это сработает:/Network/Services/Service[ServiceDetails/@Description = /Network/Machines/Machine[@Name='MyMachine']/Services/ServiceDetails/@Description]
) - person Daniel Haley   schedule 22.09.2011