2015-12-03 3 views
2

У меня есть быстрый вопрос о передаче выражения XPath в качестве значения для атрибута. Поэтому у меня есть следующий документ:Как найти элемент по атрибуту, получив ссылку?

<?xml version="1.0"?> 

<personnel> 
<person id="EMP01" > 
    <name><family>Lee</family><given>Ho</given></name> 
    <email>[email protected]</email> 
    <salary>100000</salary> 
    <links> 
    <subordinate>EMP02</subordinate> 
    <subordinate>EMP03</subordinate> 
    </links> 
</person> 

<person id="EMP02"> 
    <name><family>Chan</family><given>Tai Man</given></name> 
    <email>[email protected]</email> 
    <salary>20000</salary> 
    <links> 
    <manager>EMP01</manager> 
    <subordinate>EMP04</subordinate> 
    <subordinate>EMP05</subordinate> 
    </links> 
</person> 

<person id="EMP03"> 
    <name><family>Cheung</family><given>Siu Fan</given></name> 
    <email>[email protected]</email> 
    <salary>20200</salary> 
    <links> 
    <manager>EMP01</manager> 
    <subordinate>EMP07</subordinate> 
    </links> 
</person> 

<person id="EMP04"> 
    <name><family>Ng</family><given>Ho</given></name> 
    <email>[email protected]</email> 
    <salary>11000</salary> 
    <links> 
    <manager>EMP02</manager> 
    </links> 
</person> 

<person id="EMP05"> 
    <name><family>Chow</family><given>Sing Sing</given></name> 
    <email>[email protected]</email> 
    <salary>20050</salary> 
    <links> 
    <manager>EMP02</manager> 
    <subordinate>EMP06</subordinate> 
    </links> 
</person> 

<person id="EMP06"> 
    <name><family>Law</family><given>Lai</given></name> 
    <email>[email protected]</email> 
    <salary>5050</salary> 
    <links> 
    <manager>EMP05</manager> 
    </links> 
</person> 

<person id="EMP07"> 
    <name><family>Chan</family><given>Siu Ming</given></name> 
    <email>[email protected]</email> 
    <salary>5000</salary> 
    <links> 
    <manager>EMP03</manager> 
    </links> 
</person> 

И мне нужно выражение XPath, чтобы получить человек-узел менеджера семьи с законом именем, поэтому в данном случае, г-н Чоу. Но как я могу получить это в XPath без явного использования имени Chow?

Моя попытка была:

personnel/person[@id="personnel/person/name/family='Law'"] 

Но это на самом деле не работает ... я могу передать XPath в качестве значения для атрибута, как это, или как я могу это сделать?

ответ

1

Не используйте кавычки, если вы хотите, чтобы строка читалась как выражение XPath вместо литеральной строки. Попробуйте что-то вроде этого:

/personnel/person[@id=/personnel/person[name/family='Law']/links/manager]/name/family 

xpathtester demo

выход:

<family>Chow</family> 
+0

Вы можете добавить '/ текст()', если вы просто заинтересованы в содержании. – ceving

+0

Ах .... хорошо, я думал, что значения атрибутов всегда должны быть помещены в кавычки ^^ Круто, спасибо! –

Смежные вопросы