節點模板這是我的XML輸入文件XSL,只適用於兒童
<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」。
非常感謝您的幫助!
你能稍微詳細一點解釋標籤嗎? –
你不明白表達的哪一部分?我很高興回答這些問題,表明您已經努力瞭解正在發生的事情。 –
您寫的表達式匹配具有Map作爲單詞和'[not(self :: myMap)] [not(*)]''的標記嗎?你可以像丹尼爾海莉做的那樣向我展示你的解決方案嗎? –