首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模板匹配不适用于嵌套元素文本

模板匹配不适用于嵌套元素文本
EN

Stack Overflow用户
提问于 2018-01-30 15:36:37
回答 1查看 76关注 0票数 0

我想用一个元素替换一个特殊的字符。当单独执行最后一个模板时,这已经起作用了。

代码语言:javascript
运行
复制
<!-- copy whole xml -->
<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>

<!-- rename delement to replacedElement and only copy its text> -->
<xsl:template name="delement">
    <xsl:element name="replacedElement"
        <xsl:value-of select="text()"/>
    </xsl:element>
</xsl:template> 

<!-- replace special char with element -->
<xsl:template match="descendant-or-self::text()">
    <xsl:analyze-string select="." regex="-">
        <xsl:matching-substring>
            <elementForSC/>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

当复制更深/嵌套元素的文本时,问题似乎类似于第二个模板匹配。此文本也包含特殊字符,但未被替换。

示例:

代码语言:javascript
运行
复制
<body>
     just some text but - char is replaced here.
     <delement>
          here text with - in it but it didn't get replaced
     </delement>
</body>

结果:

代码语言:javascript
运行
复制
<body>
     just some text but <elementForSC/> char is replaced here.
     <replacedElement>
           here text with - in it but it didn't get replaced 
     </replacedElement>
</body>

你知道如何在修改/复制的文本上递归地应用特殊的字符替换“规则”吗?

另请参阅帮助以获得更好的标题欢迎;-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 16:54:30

如果您希望将文本节点的模板应用于所有文本节点,则必须使用apply-templates而不是value-of来保持递归处理的活动状态。

代码语言:javascript
运行
复制
<xsl:template match="delement">
  <replacedElement>
    <xsl:apply-templates/>
  </replacedElement>
</xsl:template>

您还可以简化文本节点的匹配模式,使其只使用match="text()"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48516208

复制
相关文章

相似问题

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