我是XSLT的新手,在尝试更改基于不需要的格式的XML表时遇到问题。
我需要将所有<Column>
元素重命名为相应的元素<test1><test2><test3><test4><test5><test6><test7><test8><test9>
。
见下文:
<Csv>
<Row rowNo="1">
<Column>1999-01-02T10:30:20</Column>
<Column>200</Column>
<Column>17</Column>
<Column>1</Column>
<Column>15</Column>
<Column>10</Column>
<Column>210</Column>
<Column>main strip Top</Column>
<Column>Tyre Check</Column>
</Row>
<Row rowNo="2">
<Column>2014-03-08T10:30:20</Column>
<Column>200</Column>
<Column>17</Column>
<Column>1</Column>
<Column>45</Column>
<Column>14</Column>
<Column>520</Column>
<Column>main strip Left</Column>
<Column>Tyre Fixed</Column>
</Row>
</Csv>
答案 0 :(得分:1)
虽然我不是100%肯定这就是你要找的东西,但是下面的样式表会产生我认为你想要的输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="Row/Column">
<xsl:variable name="count">
<xsl:number />
</xsl:variable>
<xsl:element name="test{$count}">
<xsl:apply-templates select="node()|@*" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
当应用于您的输入时,它会产生......
<?xml version="1.0" encoding="UTF-8"?><Csv>
<Row rowNo="1">
<test1>1999-01-02T10:30:20</test1>
<test2>200</test2>
<test3>17</test3>
<test4>1</test4>
<test5>15</test5>
<test6>10</test6>
<test7>210</test7>
<test8>main strip Top</test8>
<test9>Tyre Check</test9>
</Row>
<Row rowNo="2">
<test1>2014-03-08T10:30:20</test1>
<test2>200</test2>
<test3>17</test3>
<test4>1</test4>
<test5>45</test5>
<test6>14</test6>
<test7>520</test7>
<test8>main strip Left</test8>
<test9>Tyre Fixed</test9>
</Row>
</Csv>
XSLT的作用是,默认情况下它会复制任何元素,文本节点,属性和其他输入。如果在任何Column
元素中遇到Row
元素,它将首先将<xsl:number />
的结果放入变量中。这实际上是Row
中元素的排名。然后,它创建一个名为test
的元素,后跟该变量值,并将模板应用于当前Column
中的任何属性或节点 - 这是确保复制文本内容和任何其他节点/属性所必需的