xslt选择不同值的元素



考虑以下xml:

<Images>
 <Extra1>a</Extra1>
 <Extra2>b</Extra2>
 <Img1>img1</Img1>
 <Img2>img2</Img2>
 <Img3>img2</Img3>
 <Img4>img1</Img4>
</Images>

我想要元素Img1, Img2, Img3, Img4的不同值的集合,以便输出节点集具有值img1img2。我以前使用过xsl:key,但这需要所有元素的名称都相同。如何为不同的元素名称实现这一点?

您可以这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  <xsl:key name="kImageValue" match="Images/*[starts-with(local-name(), 'Img')]"
           use="."/>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="Images">
    <xsl:copy>
      <xsl:apply-templates select="*[generate-id() = generate-id(key('kImageValue', .)[1])]" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="Images/*">
    <Value>
      <xsl:value-of select="."/>
    </Value>
  </xsl:template>
</xsl:stylesheet>

当在样本输入上运行时,结果是:

<Images>
  <Value>img1</Value>
  <Value>img2</Value>
</Images>

相关内容

  • 没有找到相关文章

最新更新