0
我有以下XML文檔如何將一個XSLT模板用於不同級別的元素?
<ren:RewardAct>
<ren:RewardAttrList>
<ren:RrewardAttr>
<ren:AttrName>11111111111111</ren:AttrName>
<ren:AttrValue>11111111111111</ren:AttrValue>
</ren:RrewardAttr>
</ren:RewardAttrList>
<ren:RewardList>
<ren:Reward>
<ren:Credit>
<ren:Division>11111111111111</ren:Division>
<ren:Region>11111111111111</ren:Region>
</ren:Credit>
<ren:RewardAttrList>
<ren:RewardAttr>
<ren:AttrName>11111111111111</ren:AttrName>
<ren:AttrValue>11111111111111</ren:AttrValue>
</ren:RewardAttr>
</ren:RewardAttrList>
. . .
我想是這樣的
<RewDocSum>
<RewDocSum_ITEM>
<Value>1000.00</Value>
<Name>string</Name>
</RewDocSum_ITEM>
</RewDocSum>
<RewCategorOutlets>
<RewCategorOutlets_ITEM>
<GroupSum>
<GroupSum_ITEM>
<Value>1000.00</Value>
<Name>string</Name>
</GroupSum_ITEM>
</GroupSum>
. . .
對於元素<ren:RewardAttrList>
,它是我嘗試使用帶有參數模板的子元素,所以翻譯的樣子
<xsl:template match="//ren:RewardAct">
<xsl:apply-templates select="ren:RewardAttrList">
<xslt:with-param name="listName" select="'RewDocSum'"/>
<xslt:with-param name="itemName" select="'RewDocSum_ITEM'"/>
</xsl:apply-templates>
<xsl:apply-templates select="ren:RewardList"/>
</xsl:template>
<xsl:template match="ren:RewardList">
<RewCategorOutlets>
<xsl:apply-templates select="ren:Reward"/>
</RewCategorOutlets>
</xsl:template>
<xsl:template match="ren:Reward">
<RewCategorOutlets_ITEM>
<xsl:apply-templates select="ren:RewardAttrList">
<xslt:with-param name="listName" select="'GroupSum'"/>
<xslt:with-param name="itemName" select="'GroupSum_ITEM'"/>
</xsl:apply-templates>
<Credits>
<xsl:apply-templates select="ren:Credit"/>
</Credits>
</RewCategorOutlets_ITEM>
</xsl:template>
<xsl:template match="ren:Credit">
<Credits_ITEM>
. . .
</Credits_ITEM>
</xsl:template>
<xsl:template match="//ren:RewardAttrList">
<xsl:param name="listName"/>
<xsl:param name="itemName"/>
<xsl:element name="{$listName}">
<xsl:apply-templates select="ren:RrewardAttr">
<xslt:with-param name="listItemName" select="$itemName"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
<xsl:template match="//ren:RrewardAttr">
<xsl:param name="listItemName"/>
<xsl:element name="{$listItemName}">
<Value>
<xsl:apply-templates select="ren:AttrValue/node()"/>
</Value>
<Name>
<xsl:apply-templates select="ren:AttrName/node()"/>
</Name>
</xsl:element>
</xsl:template>
因此,模板<ren:RewardAttrList>
適用於外部元素,但不適用於內部。
我做錯了什麼?
感謝您浪費您的時間和最好的問候。
請發佈一個簡短但完整的示例 - 請參見[mcve]。 - **提示:**匹配「ren:RewardAttrList」的模板匹配整個文檔中名爲「ren:RewardAttrList」的所有**元素。但是,您必須在轉換過程中將*應用模板*應用於所有相關節點。通常,這是遞歸地完成 - 請參閱:https://www.w3.org/TR/xslt/#section-Processing-Model –
另請注意,對於您的第一個「ren:RewardAttrList」列表,子元素爲「ren: RrewardAttr',它在XSLT中正確處理,但第二個具有名爲'ren:RewardAttr'的子元素,它與XSLT不匹配。 –
感謝@Tim C.我的眼睛很累,我只是沒有看到'ren:RrewardAttr'和'ren:RewardAttr'之間的區別。 – gooamoko