XPath查找名称以给定值开头的属性

时间:2011-11-29 09:18:49

标签: xpath attributes

使用这个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开头

3 个答案:

答案 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>