我有一个像这样的源xml。。
<root>
<rootElement>
<Name>Name1</Name>
<ID>001</ID>
<element1>A</element1>
<element2>B</element2>
<element3>C</element3>
<elementName>First</elementName>
</rootElement>
<rootElement>........</rootElement>
</root>
我想要一个类似的目标xml
<root>
<rootElement>
<name>Name1</name>
<id>001</id>
<element1>A</element1>
<element2></element2>
<element3></element3>
<processedFlag>N</processedFlag>
<elementName>First</elementName>
</rootElement>
<rootElement>
<name>Name1</name>
<id>001</id>
<element1></element1>
<element2>B</element2>
<element3></element3>
<processedFlag>N</processedFlag>
<elementName>First</elementName>
</rootElement>
<rootElement>
<name>Name1</name>
<id>001</id>
<element1></element1>
<element2></element2>
<element3>C</element3>
<processedFlag>N</processedFlag>
<elementName>First</elementName>
</rootElement>
</root>
意味着对于每条记录,我需要3个<rootElement>
标签。
我尝试过使用oraext:create-nodeset-from-delimited-string
,但它不适用于多个元素。请帮忙。
这样试试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="rootElement/element1 | rootElement/element2 | rootElement/element3"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element1 | element2 | element3">
<rootElement>
<xsl:copy-of select="../Name | ../ID "/>
<element1>
<xsl:value-of select="current()[self::element1]" />
</element1>
<element2>
<xsl:value-of select="current()[self::element2]" />
</element2>
<element3>
<xsl:value-of select="current()[self::element3]" />
</element3>
<processedFlag>N</processedFlag>
<xsl:copy-of select="../elementName"/>
</rootElement>
</xsl:template>
</xsl:stylesheet>
演示:http://xsltransform.net/bFN1y99