使用XSLT提取所有属性值

时间:2022-03-30 03:48:46

Can anybody help? I have following XML:

有人可以帮忙吗?我有以下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>

Basicly i would need to write every value of attr in new XML like:

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

something1
somethin21
something321
something15
something215
something 32156

I tried everything, but can not make it work like i would need to. Also note that attr can appear everywhere in XML (not just XML structure and nodes above).

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

Thanks for all your help, Eoglasi

感谢你的帮助,Eoglasi

1 个解决方案

#1


2  

This will do it:

这样做:

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

When run on your sample input, the result is:

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

something1
something21
something321
something15
something215
something32156

Here is an XSLT that uses grouping to only show distinct values.

这是一个使用分组仅显示不同值的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>

#1


2  

This will do it:

这样做:

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

When run on your sample input, the result is:

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

something1
something21
something321
something15
something215
something32156

Here is an XSLT that uses grouping to only show distinct values.

这是一个使用分组仅显示不同值的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>