【问题标题】: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() 函数来获取当前元素的名称。
    例如,如果.&lt;field1&gt;,它将返回'field1'

    所以模板的对应部分是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 2015-09-23
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多