我有以下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>
我不知道从哪里开始。
需要将每个元素转换为元素,并通过position属性,但每个元素都需要被创建为属性名称,并且每个子属性都需要被赋予属性值。
非常感谢任何帮助。
答案 0 :(得分: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。