XPath найти атрибуты, где имя начинается с заданного значения
С помощью этого 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
Ответы
Ответ 1
Вы можете попробовать следующее:
//div/@*[starts-with(name(.), 'val')]
если вы знаете, что ищете первый атрибут элемента div.
Edit:
Извините, вы не поняли, что хотите сами выбрать элементы. Вы можете использовать parent:: div или то, что вы сделали, но правильным способом сделать это было бы непосредственно выбрать div:
//div[@*[starts-with(name(), 'val')]]
Ответ 2
Вы пробовали с... /@val *?
Ответ 3
которые являются теми узлами, у которых есть атрибут, где имя атрибута начинается с val
Использование
//div[@*[starts-with(name(), 'val')]]
Это выбирает любой элемент div
в документе, который имеет хотя бы один атрибут, имя которого начинается со строки "val"
.
Проверка на основе XSLT:
Это преобразование:
<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>