Xpath: найти значение элемента из совпадения атрибута id с идентификатором id - PullRequest
6 голосов
/ 21 сентября 2010

Я хотел бы найти значение элемента, соответствующего атрибуту id, для которого у меня есть только ref - бит с #, якорь.

Я ищу значение partyId:

 < party id="partyA" >
   < partyId >THEID< /partyId >

но чтобы добраться туда, у меня есть только href из следующих

  < MyData >
    < MyReference href="#partyA" />

Полосатый знак # мне не нравится.

Есть намеки?

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

Поскольку вы не предоставили полные документы XML, я должен использовать // - практику, которую я настоятельно рекомендую избегать.

Предположим, что

$vDataRef

определяется как

//MyData/MyReference/@href

, а его строковое значение равно "#partyA", , затем одно возможное выражение XPathвыбирается требуемый узел :

//party[@id=substring($vDataRef,2)]

В случае, если документ XML имеет DTD, в котором атрибут id для party определен как тип ID, тогда онудобнее и эффективнее использовать стандартную функцию XPath id():

id(substring($vDataRef,2))
1 голос
/ 22 сентября 2010

Предполагая, что у вас уже есть идентификатор в качестве переменной (скажем, $myId), попробуйте использовать:

//party[contains($myId, @id)]

Функция contains () будет выглядеть на каждомсоответствующий узел, независимо от того, находится ли атрибут partyId в значении, которое вы передаете.

В качестве альтернативы (так как это можно считать «веревочным»), вы можете попробовать:

//party[@id=substring($myId, 2, 1 div 0)]

функция substring () должна быть немного более точной.

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