XPath: выберите родительские узлы, у которых есть подузел с атрибутом - PullRequest
9 голосов
/ 02 ноября 2011

Я хочу получить узлы "Package", которые имеют внука "System" с атрибутом "mtm", а значение атрибута "mtm" равно "2055".Для приведенного ниже примера документа должен быть возвращен только первый узел Package.

Я использую

"/Database/Package[/SystemCompatibility/System[@mtm='2055']]"

, но он не работает.Что не так с этим выражением?

<?xml version="1.0" encoding="UTF-8"?>
<Database version="300">
<Package id="6imb05ww" description="ThinkPad Modem Adapter">  
    <SystemCompatibility>
        <System mtm="8742" os="Windows XP" oslang="en" />
        <System mtm="2055" os="Windows XP" oslang="jp" />
    </SystemCompatibility>
</Package>
<Package id="6imb06ww" description="ThinkPad Modem Adapter">  
    <SystemCompatibility>
        <System mtm="3046" os="Windows XP" oslang="en" />
    </SystemCompatibility>
</Package>
</Database>

Ответы [ 2 ]

13 голосов
/ 02 ноября 2011

Удалить / до SystemCompatibility

/Database/Package[SystemCompatibility/System[@mtm='2055']]
2 голосов
/ 02 ноября 2011

Попробуйте использовать:

/Database/Package/descendant::System[@mtm='2055']

Использование оператора :: :: ::. ::. ::. ::. ::. ::. ::. ::. ::. ::. ::. ::. Возможн http://www.w3schools.com/xpath/xpath_axes.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...