【问题标题】:Need help in XSL for DOE (disable-output-escpaing)需要 DOE 的 XSL 帮助(禁用输出转义)
【发布时间】:2016-12-27 04:40:36
【问题描述】:

我有这个输入 XML,我想在其中使用 disable-output-escaping 功能将 " 替换为 ",而不是在输出 XML 中。我在以下 XSL 上尝试了各种方法,但没有用 - 某些东西或其他东西破坏了所需的 name 标记。

输入 XML:

<?xml version="1.0" encoding="UTF-8"?>
<book>
    <name>&quot;test&quot;</name>
    <type>computer</type>
</book>

转换 XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="book">
        <book>
            <xsl:apply-templates />
        </book>
    </xsl:template>
    <xsl:template match="name">
        <name>
            <xsl:text disable-output-escaping="yes">
                <![CDATA[&quot;test&quot;]]>
            </xsl:text>
        </name>
    </xsl:template>
    <xsl:template match="type">
        <genre>
            <xsl:apply-templates />
        </genre>
    </xsl:template>
</xsl:stylesheet>

所需的输出 XML:

<?xml version="1.0" encoding="UTF-8"?>
<book>
    <name>"test"</name>
    <genre>computer</genre>
</book>

我得到的输出 XML:

<?xml version="1.0" encoding="UTF-8"?><book>
    <name>
                &quot;test&quot;
            </name>
    <genre>computer</genre>
</book>

谁能提供一些关于如何完成这项工作的见解?

我一直在寻找各种来源,但修复这个没有用!

【问题讨论】:

  • 请注意,我认为根本不需要转换 name 元素,任何复制它的转换,如 xsltransform.net/ncntCSx,都应该导致 &lt;name&gt;"test"&lt;/name&gt;,因为没有理由逃避元素内容中的引用。
  • 很好,感谢您提供的示例 XSL!

标签: xml xslt


【解决方案1】:

通过将文本放在样式表中的 CDATA 中,您可以强制对它进行字面处理。如果它不在 CDATA 中,它会按照您想要的方式工作。没有理由将它放在样式表的 CDATA 部分中。

【讨论】:

  • 没有CDATA 部分,我只会得到一个空白的&lt;name&gt;&lt;/name&gt; 标签
  • 它适用于我将 Oxygen/XML 14 与 Saxon 6.5.5 和 Saxon 9.4.0.6 (XSLT 1.0) 一起使用。只要文本不在 CDATA 部分中,它也会产生带有或不带有禁用输出转义的所需结果。
  • 在应用您的建议后发现了问题,我错过了在XSL 中添加&lt;xsl:apply-templates /&gt; 标记在&lt;name&gt; 标记下。
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多