xsl transformation - tree xml到plain field-value xml

时间:2013-05-08 05:26:57

标签: xml xslt transformation

我希望通过xslt这个xml自动处理示例,字段和值必须动态解析,而不是硬编码:

<root>
<field1>value1</field1>
<field2>value2</field2>
</root>

到此:

<items>
<field>field1</field>
<value>value1</value>
<field>field2</field>
<value>value2</value>
</items>

请帮忙。

2 个答案:

答案 0 :(得分:0)

您可以使用name()函数获取当前元素的名称 例如,如果'field1'.,则会返回<field1>

因此模板的相应部分将是

<field><xsl:value-of select="name()" /></field>
<value><xsl:value-of select="." /></value>

答案 1 :(得分:0)

您需要以下内容:

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

  <xsl:template match="root">
    <items>
      <xsl:apply-templates/>
    </items>
  </xsl:template>

  <xsl:template match="*">
    <xsl:param name="firstElement" select="replace(name(),'([0-9])','')"/>
    <xsl:param name="SecondElement" select="replace(text(),'([0-9])','')"/>
    <xsl:element name="{$firstElement}">
      <xsl:value-of select="name()"/>
    </xsl:element>
    <xsl:element name="{$SecondElement}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>