有人可以指导我如何编写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>
答案 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>