gpt4 book ai didi

xml - 使用禁用输出转义转换 XML 混合节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:10 28 4
gpt4 key购买 nike

关于这个问题的变体已经发布,但我找不到任何解决基本情况的变体。我认为对问题的最简单版本有一个规范的答案会很好。这个问题假设 xslt 1.0。

我有一个包含混合节点的 XML 文档,例如:

<paragraph>     This is some text that is <bold>bold</bold>      and this is some that is <italic>italicized.</italic></paragraph>

我通常会使用看起来像这样的转换:

<xsl:template match="bold">    <b><xsl:apply-templates/></b></xsl:template><xsl:template match="italic">    <i><xsl:apply-templates/></i></xsl:template><xsl:template match="paragraph">    <p><xsl:apply-templates/></p></xsl:template>

在我想使用 disable-output-escaping="yes"之前效果很好,它是 xsl:value-of 的一个属性。有没有办法选择混合节点的文本部分,我可以在其中应用独立于嵌入节点的值?

这当然行不通,因为我会丢失子节点:

<xsl:template match="paragraph">    <p><xsl:value-of select="." disable-output-escaping="yes"/></p></xsl:template>

我知道我正在尝试这样做的事实可能代表了我处理 XML 的方式中的一个固有问题,但是大部分 XML 是由(受信任的)用户输入相当天真地生成的,我正在尝试避免在 XML->XSLT->HTML 表单之间(如果可能的话)大量额外的处理代码。

最佳答案

如果我没理解错的话,您希望文本节点作为文字文本 (disable-output-escaping="yes"),但其余转换应该正常工作(<bold><b> 等)

模板模式可以提供帮助:

<xsl:stylesheet 
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" />

<xsl:template match="paragraph">
<p>
<xsl:apply-templates mode="literal" />
</p>
</xsl:template>

<!-- literal templates (invoked in literal mode) -->
<xsl:template match="bold" mode="literal">
<b><xsl:apply-templates mode="literal"/></b>
</xsl:template>
<xsl:template match="italic" mode="literal">
<i><xsl:apply-templates mode="literal"/></i>
</xsl:template>
<xsl:template match="text()" mode="literal">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>

<!-- normal templates (invoked when you don't use a template mode) -->
<xsl:template match="bold">
<b><xsl:apply-templates /></b>
</xsl:template>
<xsl:template match="italic">
<i><xsl:apply-templates /></i>
</xsl:template>

</xsl:stylesheet>

关于xml - 使用禁用输出转义转换 XML 混合节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335255/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com