XSLT复制一个节点值并创建一个新节点

时间:2016-04-15 08:49:05

标签: xslt

有人可以指导我如何编写XSLT1.0来创建输出,如下所示? <csvImportSchema> <payload> <test>**COPY VALUE**</test> <test2>2</test2> <test3>3</test3> <ean>1111111111</ean> <productId/> </payload> </csvImportSchema>

<csvImportSchema> <payload> <test>COPY VALUE</test> <test2>2</test2> <test3>3</test3> <ean>1111111111</ean> <productId/> **<copied>COPY VALUE</copied>** </payload> <csvImportSchema>

1 个答案:

答案 0 :(得分:0)

以下XSLT提取COPY VALUE之间的**字符串,并将其复制到<payload>标记的末尾。然后将COPY VALUE之前和之后的字符串用作<copied>标记的前缀和后缀。

<?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" indent="yes"/>

<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="payload">
    <xsl:variable name="copyval" select="substring-before(substring-after(test/text(),'**'),'**')" />
    <xsl:variable name="valBefore" select="substring-before(test/text(),$copyval)" />
    <xsl:variable name="valAfter" select="substring-after(test/text(),$copyval)" />
    <xsl:copy>
      <test><xsl:value-of select="$copyval" /></test>
      <xsl:apply-templates select="node()[not(self::test)]|@*" />
      <xsl:value-of select="$valBefore" /><copied><xsl:value-of select="$copyval" /></copied><xsl:value-of select="$valAfter" />
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>