使用XSLT提取所有属性值

时间:2013-11-20 17:11:30

标签: xml xslt extract

有人可以帮忙吗?我有以下XML:

<root>
 <tag1 attr="something1">
    <tag21 attr="something21"></tag21>
    <tag321 attr="something321"></tag321>
 </tag1>
 <tag144 attr="something15">
    <tag21 attr="something215"></tag21>
     <tag321 attr="something32156"></tag321>
 </tag144>
</root>

基本上我需要在新的XML中编写attr的每个值,如:

something1
somethin21
something321
something15
something215
something 32156

我尝试了一切,但不能让它像我需要的那样工作。另请注意,attr可以出现在XML的任何位置(不仅仅是上面的XML结构和节点)。

感谢您的帮助, Eoglasi

1 个答案:

答案 0 :(得分:2)

这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />

  <xsl:template match="/">
    <xsl:apply-templates select="//@attr" />
  </xsl:template>

  <xsl:template match="@attr">
    <xsl:value-of select="concat(., '&#xA;')"/>
  </xsl:template>

</xsl:stylesheet>

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

something1
something21
something321
something15
something215
something32156

这是一个使用分组仅显示不同值的XSLT。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
  <xsl:key name="kAttr" match="@attr" use="." />

  <xsl:template match="/">
    <xsl:apply-templates 
      select="//@attr[generate-id() = 
                      generate-id(key('kAttr', .)[1])] " />
  </xsl:template>

  <xsl:template match="@attr">
    <xsl:value-of select="concat(., '&#xA;')"/>
  </xsl:template>

</xsl:stylesheet>