【问题标题】:xsl transformation - tree xml to plain field-value xmlxsl 转换 - 树 xml 到普通字段值 xml
【发布时间】:2013-05-08 05:26:57
【问题描述】:
我想通过xslt自动处理这个xml示例,字段和值必须动态解析,而不是硬编码:
<root>
<field1>value1</field1>
<field2>value2</field2>
</root>
到这里:
<items>
<field>field1</field>
<value>value1</value>
<field>field2</field>
<value>value2</value>
</items>
请帮忙。
【问题讨论】:
标签:
xml
xslt
transformation
【解决方案1】:
你需要这样的东西:
<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>
【解决方案2】:
您可以使用name() 函数来获取当前元素的名称。
例如,如果. 是<field1>,它将返回'field1'。
所以模板的对应部分是
<field><xsl:value-of select="name()" /></field>
<value><xsl:value-of select="." /></value>