xslt查找具有相同属性的子节点

时间:2013-08-30 15:07:15

标签: xml xslt xslt-1.0 xslt-2.0

我的情况很奇怪:

XML

...
<item>
    <p><a href="image-01">image X</a>text...</p>
    <p>text...<a href="image-02">image Y</a></p>
    <p>some...<a href="image-02">image y2</a></p>
    <img id="image-02" />
</item>
...

我必须找到具有相同属性@href(如果存在)的标签,并添加第一个额外属性(如class =“xyz”) 可能吗???
谢谢你 抱歉语法

1 个答案:

答案 0 :(得分:1)

您可以使用

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:key name="by-href" match="*[@href]" use="@href"/>

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* , node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="*[@href][. is key('by-href', @href)[1]]">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:attribute name="class" select="'xyz'"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

使用Saxon 9或AltovaXML或XmlPrime等XSLT 2.0处理器。