来自 ValueList 的动态 XML 元素名称



请问下面是否可行?鉴于我们有以下丑陋(但有效(的XML,它在其元素中包含valueList:

<LIST>
    <COLUMN>    COL1    COL2    COL3    COLn    </COLUMN>
    <VALUE>     val1    val2    val3    valn    </VALUE>
    <VALUE>     val4    val5    val6    valn2   </VALUE>
</LIST>

是否可以使用 XSLT 将其转换为此格式?

<LIST>
    <VALUE>
        <COL1>val1</COL1>
        <COL2>val2</COL2>
        <COL3>val3</COL3>
        <COLn>valn</COLn>
    </VALUE>
    <VALUE>
        <COL1>val4</COL1>
        <COL2>val5</COL2>
        <COL3>val6</COL3>
        <COLn>valn2</COLn>
    </VALUE>
</LIST>

我在此示例中所做的如下..但无法将列元素的值列表设置为值的动态元素。

<xsl:template name="Sample">
    <LIST>
    <xsl:for-each select="$srcDelete/LIST/VALUE">
        <VALUE>         
            <xsl:for-each select="tokenize(normalize-space(.),' ')">
                <item><xsl:value-of select="."/></item>
            </xsl:for-each>               
        </VALUE>
    </xsl:for-each>
    </LIST>
</xsl:template> 
<xsl:template match="/">
         <xsl:call-template name="Sample"/>  
</xsl:template>

。其输出:

<?xml version="1.0" encoding="UTF-8"?>
<LIST>
   <VALUE>
      <item>val1</item>
      <item>val2</item>
      <item>val3</item>
      <item>valn</item>
   </VALUE>
   <VALUE>
      <item>val4</item>
      <item>val5</item>
      <item>val6</item>
      <item>valn2</item>
   </VALUE>
</LIST>

您也可以标记列名,然后使用它们:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
<xsl:template match="LIST">
    <LIST>
    <xsl:variable name="col-names" select="for $name in tokenize(COLUMN, 's+')[normalize-space()] return normalize-space($name)"/>
    <xsl:for-each select="VALUE">
        <VALUE>         
            <xsl:for-each select="tokenize(normalize-space(.),' ')">
                <xsl:variable name="pos" select="position()"/>
                <xsl:element name="{$col-names[$pos]}">
                    <xsl:value-of select="."/>
                </xsl:element>
            </xsl:for-each>               
        </VALUE>
    </xsl:for-each>
    </LIST>
</xsl:template>
</xsl:transform>

在线 http://xsltransform.net/94rmq6N。

相关内容

  • 没有找到相关文章