2014-10-07 78 views
0

我正在学习使用mode属性,并且必须做错某些事情。道歉,如果这已经回答过,但我没有在这里找到它。XSLT:结果文档中忽略模式的模板

我想根据上下文分别处理“标题”元素。对于主文件,我想添加一个“a”元素在它的内部:

<xsl:template match="title"> 
    <div> 
     <xsl:value-of select="."/> 
     <a href="some_URL">some text 
     </a> 
    </div> 
    </xsl:template> 

但在其他地方我创建结果的文档,我只想标题:

<xsl:tamplate match="title" mode="print"> 
    <div class="title"> 
     <xsl:value-of select="."/> 
    </div> 
    </xsl:template> 

在我主模板匹配= “/” 我在做的for-each每个部分,创造了每一个结果文档:

<xsl:for-each select="/topic/body/bodydiv/section"> 
    <xsl:result-document href="{$printoutfile}"> 
    <html><head>some stuff</head><body> 
    <div class="section"> 
     <xsl:apply-templates mode="print"/> 
    </div> 
    ... more stuff... 
    </body</html> 
    </xsl:result-document> 
    </xsl:for-each> 

然后我呼吁一切对主文档:

<html><head>stuff</head> 
    <body> 
    <div> 
     <xsl:apply-templates/> 
    </div> 
    </body> 
    </html> 

问题是这是结果文档标题的作品,但没有使用其他结果文档模板,因为它们没有mode =“print”。因此,结果文档的其余部分都以文本形式出现。

任何想法我需要在这里做什么?我显然缺少一些基本的东西。

谢谢 斯科特

+1

你还没有显示任何其他模板,但如果你期望'xsl:apply-templates mode =“print”/>'应用它们,那么你需要在它们上面有一个'mode =“#all”' 。如果他们使用'apply-templates',那么你需要使用''。有关详细信息,请参阅http://www.w3.org/TR/xslt20/#modes。 – 2014-10-07 17:23:55

+0

很好用,谢谢!但我收到一条错误消息: IDW0713E:XTRE0540:/ topic/body [1]/bodydiv [2]/section [1]/title [1]的模糊规则匹配 感谢您的帮助。 – 2014-10-08 15:11:21

+1

让我们在一个问题中解决一个问题。我已将我的评论意见转化为答案,以便我们能够解决这个问题。对于另一个问题,问一个新的问题,除非你的XSLT处理器告诉你哪个两个或多个模板匹配那个'title'元素,你可以简单地通过决定哪一个具有更高的优先级, 'priority =“5”'就可以了。 – 2014-10-08 16:32:12

回答

1

您还没有表现出任何的其他的模板,但如果你希望在<xsl:apply-templates mode="print"/>应用它们,那么你需要对他们有mode="#all"。如果他们做了额外的应用模板,那么你需要使用<xsl:apply-templates select="#current"/>。详情请参阅http://www.w3.org/TR/xslt20/#modes