2

我有以下 XML 文件:-

<?xml version="1.0" encoding="UTF-8"?>
<viewentries>
    <viewentry position="1">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
    <viewentry position="2">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
</viewentries>

我需要使用 XSL 样式表将此 XML 文件转换为以下内容:-

<?xml version="1.0" encoding="UTF-8"?>
<records>
    <record position="1" col0="Text1" col1="Text2" col2="Text3"/>
    <record position="2" col0="Text1" col1="Text2" col2="Text3"/>
</records>

我不知道从哪里开始。

每个元素都需要转换为一个元素,通过位置属性拉取,但是每个元素都需要做成属性名,每个子属性都需要做成属性值。

任何帮助是极大的赞赏。

4

1 回答 1

2

这种转变

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <records>
    <xsl:apply-templates/>
  </records>
 </xsl:template>

 <xsl:template match="viewentry">
  <record>
    <xsl:apply-templates/>
  </record>
 </xsl:template>

 <xsl:template match="entrydata">
  <xsl:attribute name="col{@columnnumber}">
    <xsl:value-of select="text"/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时

<viewentries>
    <viewentry position="1">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
    <viewentry position="2">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
</viewentries>

产生想要的正确结果:

<records>
   <record col0="Text1" col1="Text2" col2="Text3"/>
   <record col0="Text1" col1="Text2" col2="Text3"/>
</records>

说明

正确使用模板、xsl:attribute指令和 AVT。

于 2012-06-15T12:50:04.617 回答