XSL: поиск по имени узла

#xml #xslt #xpath

#xml #xslt #xpath

Вопрос:

Я хочу выполнить поиск дочернего узла, который начинается с «php»

 <globals-cookie>
    <utma>1.959760512.1318348214.1318348214.1318348214.1</utma>
    <utmz>1.1318348214.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)</utmz>
    <phpsessid34534>826427ef2fade7f9471581a429ce266d</phpsessid34534>
    <utmb>122420241.88.10.1321257433</utmb>
    <utmc>122420241</utmc>
</globals-cookie>
  

Я бы написал //globals-cookie/phpsessid34534 , но номер меняется в конце..

Ответ №1:

Вы можете использовать этот XPath:

 globals-cookie/*[starts-with(local-name(), 'php')]
  

Комментарии:

1. Я нашел //globals-cookie/*[starts-with(name(), 'php')] очень похожее, спасибо!

Ответ №2:

Во-первых, XPath к такому узлу, который вы описываете, будет:

/globals-cookie/*[starts-with(local-name(.),'php']

Во-вторых, для этого и нужны атрибуты — что-то подобное было бы более разумным.

 <php sessid="34534">826427ef2fade7f9471581a429ce266d</php>
  

Комментарии:

1. Something like this would be more sensible. — вы предполагаете, что я могу изменить XML

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