Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsl转换-树xml到普通字段值xml_Xml_Xslt_Transformation - Fatal编程技术网

xsl转换-树xml到普通字段值xml

xsl转换-树xml到普通字段值xml,xml,xslt,transformation,Xml,Xslt,Transformation,我想通过xslt自动处理此xml,示例、字段和值必须动态解析,而不是硬编码: <root> <field1>value1</field1> <field2>value2</field2> </root> 价值1 价值2 为此: <items> <field>field1</field> <value>value1</value> <field>fi

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

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

价值1
价值2
为此:

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

字段1
价值1
字段2
价值2
请提供帮助。

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

所以模板的相应部分是

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

您需要类似于:

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

太棒了!谢谢,很简单!谢谢