2016-04-15 7 views
0

Может ли кто-нибудь помочь мне написать XSLT1.0 для создания вывода, как показано ниже? <csvImportSchema> <payload> <test>**COPY VALUE**</test> <test2>2</test2> <test3>3</test3> <ean>1111111111</ean> <productId/> </payload> </csvImportSchema>XSLT для копирования одного значения узла и создания нового узла

к

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

ответ

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> 
+0

Я не думаю, что эти звездочки действительно есть. И я не думаю, что 'node() [local-name()! = 'Test']' является хорошей практикой - я бы использовал 'node() [not (self :: test)]'. При необходимости вообще. –

+0

@ michael.hor257k: Я улучшил свой ответ с предложенной вами лучшей практикой. Что касается звездочек: Да, я тоже об этом подумал. Но этот вопрос был задан, и я попытался ответить на него как данность. Если автор прокомментировал бы это, я мог бы легко удалить эти строки, если это необходимо. – zx485