是否可以将以下stylesheet中的调用模板语句替换为apply- statement?因此模板的结构几乎是相同的。对于结构,我的意思是我有一个xpath从源xml中选择一个元素,比如/shiporder/address/city,我有一个目标xpath作为我的输出xml,比如/root/Address/Country,然后我反向遍历源路径。所有的/shiporder/address/city都放在Country下,所有的/shiporder/address都放在Address下,根shiporder成为标签root。
源XML:
<shiporder>
<shipto>orderperson1</shipto>
<shipfrom>orderperson2</shipfrom>
<address>
<city>London</city>
</address>
<address>
<city>Berlin</city>
</address>
</shiporder>样式表:
<xsl:template match="/">
<xsl:apply-templates select="shiporder"/>
</xsl:template>
<xsl:template match="/shiporder">
<root>
<xsl:apply-templates select="address/city"/>
<xsl:call-template name="Identity" />
</root>
</xsl:template>
<xsl:template name="Identity">
<Identity>
<xsl:call-template name="Name" />
</Identity>
</xsl:template>
<xsl:template name="Name">
<Name>
<xsl:apply-templates select="/shiporder/shipto"/>
</Name>
</xsl:template>
<xsl:template match="/shiporder/shipto">
<Last>
<xsl:apply-templates select="text()"/>
</Last>
</xsl:template>
<xsl:template match="/shiporder/address/city">
<Country>
<xsl:apply-templates select="text()"/>
</Country>
</xsl:template>发布于 2016-09-27 23:53:27
一般来说,可以将<xsl:call-template name="..."/>转换为<xsl:apply-templates select="current()" mode="..."/>和<xsl:template match="node()" mode="..."/> (只要不在其他地方使用此模式)。
但在那里,积极的答案更合适。
发布于 2016-09-27 21:21:39
您可以使用以下内容:
<?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" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/shiporder">
<root>
<xsl:apply-templates select="address/city"/>
<xsl:apply-templates select="shipto"/>
</root>
</xsl:template>
<xsl:template match="shipto">
<Identity>
<Name>
<Last><xsl:value-of select="."/></Last>
</Name>
</Identity>
</xsl:template>
<xsl:template match="/shiporder/address/city">
<Country>
<xsl:value-of select="."/>
</Country>
</xsl:template>
</xsl:stylesheet>https://stackoverflow.com/questions/39725057
复制相似问题