XPath для поиска атрибутов, где имя начинается с заданного значения - PullRequest
15 голосов
/ 29 ноября 2011

С помощью этого xml:

<div val1="q">a</div>
<div val2="w">b</div>
<div val3="e">c</div>
<div some="r">d</div>
<div thing="t">f</div>
<div name="y">g</div>

мы хотим найти только

<div val1="q">a</div>
<div val2="w">b</div>
<div val3="e">c</div>

, которые являются теми узлами, имеющими атрибут, где атрибут name начинается с val

Ответы [ 3 ]

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

Вы можете попробовать это:

//div/@*[starts-with(name(.), 'val')]

если вы знаете, что ищете первый атрибут элемента div.

Edit:

Извините, не понял, что вы хотели выбрать сами элементы. Вы можете использовать parent :: div или то, что вы сделали, но правильный способ сделать это - выбрать непосредственно сам div:

//div[@*[starts-with(name(), 'val')]]
0 голосов
/ 29 ноября 2011

- это те узлы, имеющие атрибут, имя которого начинается с val

Использовать :

//div[@*[starts-with(name(), 'val')]]

Выбираетлюбой элемент div в документе, имеющий хотя бы один атрибут, имя которого начинается со строки "val".

проверка на основе XSLT :

Thisпреобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:copy-of select="//div[@*[starts-with(name(), 'val')]]"/>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML (создается из предоставленного фрагмента XML):

<html>
    <div val1="q">a</div>
    <div val2="w">b</div>
    <div val3="e">c</div>
    <div some="r">d</div>
    <div thing="t">f</div>
    <div name="y">g</div>
</html>

выбирает и выводит нужные узлы:

<div val1="q">a</div>
<div val2="w">b</div>
<div val3="e">c</div>
0 голосов
/ 29 ноября 2011

вы пробовали с ... / @ val *?

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