使用这个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>
具有属性的节点,其中属性名称以val
开头
答案 0 :(得分:13)
你可以试试这个:
//div/@*[starts-with(name(.), 'val')]
如果你知道你正在寻找div元素的第一个属性。
修改强>
抱歉没有意识到你想要自己选择元素。您可以使用parent :: div或您所做的,但正确的方法是直接选择div本身:
//div[@*[starts-with(name(), 'val')]]
答案 1 :(得分:0)
你试过... / @ val *?
答案 2 :(得分:0)
是那些具有属性名称的属性的节点 以
开头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>