使用xslt编辑XML标记

时间:2016-03-31 10:01:51

标签: xml xslt

我是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>

1 个答案:

答案 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中的任何属性或节点 - 这是确保复制文本内容和任何其他节点/属性所必需的