提取标记名称,属性及其值

时间:2011-12-18 22:58:21

标签: xml xslt

示例xml文件如下所示

<a>
<apple color="red"/>
<banana color="yellow"/>
<sugar taste="sweet"/>
<cat size="small"/>
</a>

我应该在XSLT中写什么才能获得下面的示例输出

<AAA>apple</AAA>
<BBB>color</BBB>
<CCC>red</CCC>
<AAA>banana</AAA>
<BBB>color</BBB>
<CCC>yellow</CCC>

下面是我写的XSLT文件,但我不知道如何提取值。

<xsl:template match="*/*">
<AAA>
  <xsl:value-of select="name()"/>
</AAA>
  <xsl:apply-templates select="@*"/>
</xsl:template>
<xsl:template match="@*">
<BBB>
  <xsl:value-of select="name()"/>
</BBB>
</xsl:template>

3 个答案:

答案 0 :(得分:2)

你的xml应该是

<catalog>
    <fruit>
        <name>apple </name>
        <color>red</color>
    </fruit>
    <fruit>
        <name>banana  </name>
        <color>yellow</color>
    </fruit>
</catalog>

XSLT as:

 <xsl:for-each select="catalog/fruit">
      <tr>
        <td><AAA><xsl:value-of select="title"/></AAA></td>
        <td><BBB>color</BBB></td>
        <td><CCC><xsl:value-of select="color"/></CCC></td>
      </tr>
      </xsl:for-each>

答案 1 :(得分:1)

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

  <xsl:template match="apple">
    <AAA><xsl:value-of select="local-name()"/></AAA>
  </xsl:template><!-- and then more of that for banana etc -->

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

</xsl:stylesheet>

banana等等。如果您不知道副本(或身份)模板成语,那么去谷歌搜索它;没有它,你的XSLT生活将是悲惨的。

答案 2 :(得分:1)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="*/*[not(self::sugar or self::cat)]">
  <AAA><xsl:value-of select="name()"/></AAA>
  <BBB><xsl:value-of select="name(@*)"/></BBB>
  <CCC><xsl:value-of select="@*"/></CCC>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<a>
    <apple color="red"/>
    <banana color="yellow"/>
    <sugar taste="sweet"/>
    <cat size="small"/>
</a>

生成想要的正确结果

<AAA>apple</AAA>
<BBB>color</BBB>
<CCC>red</CCC>
<AAA>banana</AAA>
<BBB>color</BBB>
<CCC>yellow</CCC>

注意:假设每个匹配的元素只有一个属性,就像提供的XML文档一样。