这是我的 xml 输入文件
<ELEMENTROOT>
<id>10036</id>
<firstName>Marco</firstName>
<lastName>Nato</lastName>
<addressSet>
<address>
<country>
<displayValue>France</displayValue>
</country>
</address>
</addressSet>
<clobMap/>
<dateMap>
<entry>
<key>birthDate</key>
<value>1973-11-29T00:00:00</value>
</entry>
</dateMap>
<myMap>
<entry>
<key>gender</key>
<value>
<id>1042</id>
<displayValue>Femminile</displayValue>
</value>
</entry>
<myMap>
</ELEMENTROOT>
我想得到的结果
<ELEMENTROOT>
<id>10036</id>
<firstName>Marco</firstName>
<lastName>Nato</lastName>
<addressSet>
<address>
<country>
<displayValue>France</displayValue>
</country>
</address>
</addressSet>
<clobMap/> <!-- Unlikely I don't have this with my xsl-->
<birthDate>
1973-11-29T00:00:00
</birthDate>
<gender>
<id>1042</id>
<displayValue>Femminile</displayValue>
</gender>
</ELEMENTROOT>
我试过的 xsl 文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="myMap">
<xsl:for-each select="entry">
<xsl:element name="{key}">
<xsl:copy-of select="value/*" />
</xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="*[contains(name(), 'Map')][not(contains(name(), 'myMap'))]">
<xsl:for-each select="./entry">
<xsl:element name="{key}">
<xsl:value-of select="value" />
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
正如你所理解的,我有这个问题:如果地图有孩子,我必须只应用模板,否则我会像上面的例子一样丢失节点。我尝试了不同的方法来仅匹配有孩子的地图,但我有两种地图:“myMap”,每个条目都有两个值,“dateMap”,每个条目都有一个值。
非常感谢您的帮助!