我想通过 xslt 自动处理这个 xml 示例,字段和值必须动态解析,而不是硬编码:
<root>
<field1>value1</field1>
<field2>value2</field2>
</root>
对此:
<items>
<field>field1</field>
<value>value1</value>
<field>field2</field>
<value>value2</value>
</items>
请帮忙。
我想通过 xslt 自动处理这个 xml 示例,字段和值必须动态解析,而不是硬编码:
<root>
<field1>value1</field1>
<field2>value2</field2>
</root>
对此:
<items>
<field>field1</field>
<value>value1</value>
<field>field2</field>
<value>value2</value>
</items>
请帮忙。
你需要类似的东西:
<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>
您可以使用name()
函数来获取当前元素的名称。
例如,它将返回'field1'
if .
is <field1>
。
所以模板的相应部分将是
<field><xsl:value-of select="name()" /></field>
<value><xsl:value-of select="." /></value>