首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apply-template而不是call-template

使用apply-template而不是call-template
EN

Stack Overflow用户
提问于 2016-09-27 20:44:41
回答 2查看 1K关注 0票数 0

是否可以将以下stylesheet中的调用模板语句替换为apply- statement?因此模板的结构几乎是相同的。对于结构,我的意思是我有一个xpath从源xml中选择一个元素,比如/shiporder/address/city,我有一个目标xpath作为我的输出xml,比如/root/Address/Country,然后我反向遍历源路径。所有的/shiporder/address/city都放在Country下,所有的/shiporder/address都放在Address下,根shiporder成为标签root

源XML:

代码语言:javascript
复制
<shiporder>
  <shipto>orderperson1</shipto>
  <shipfrom>orderperson2</shipfrom>
  <address>
  <city>London</city>
  </address>
  <address>
  <city>Berlin</city>
  </address>
</shiporder>

样式表:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 23:53:27

一般来说,可以将<xsl:call-template name="..."/>转换为<xsl:apply-templates select="current()" mode="..."/><xsl:template match="node()" mode="..."/> (只要不在其他地方使用此模式)。

但在那里,积极的答案更合适。

票数 1
EN

Stack Overflow用户

发布于 2016-09-27 21:21:39

您可以使用以下内容:

代码语言:javascript
复制
<?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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39725057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档