2013-05-08 97 views
0

我想全自动的XSLT处理这个XML实例,现场和值必须动态地分析,而不是硬编码:XSL转换 - 树XML为纯域值XML

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

这样:

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

请帮忙。

回答

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

太好了!感谢它非常简单!谢谢! – Sotona 2013-05-08 05:59:47

0

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

所以模板的相应部分将

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