【问题标题】:XSLT disable-output-escaping="yes" without line breakXSLT disable-output-escaping="yes" 没有换行符
【发布时间】:2012-07-19 15:02:27
【问题描述】:

我需要制作将生成 json 的 XSLT。

问题是我的 xml 中有 <> 符号,需要在输出中用 替换。但是 disable-output-escaping="yes" 会换行,我可以去掉这个换行吗?

XML:

<item id="166" group="0">
<name>Some Titile</name>
<text>&lt;p&gt;A dizzying array of deep, robust color, the Hugs and Kisses bouquet contains one dozen tulips and one dozen iris, fresh from the fields. It's an always-impressive bouquet perfect for a &quot;dinner for two,&quot; a special someone's birthday, or anytime you want to make someone's heart race.&lt;/p&gt;</text>
</item>

我需要的输出

{
    "name": "Some Title",
    "text": "<p>A dizzying array of deep, robust color, the Hugs and Kisses bouquet contains one dozen tulips and one dozen iris, fresh from the fields. It's an always-impressive bouquet perfect for a &quot;dinner for two,&quot; a special someone's birthday, or anytime you want to make someone's heart race.</p>;"
}

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8"/>

  <xsl:template match="item">
    {
    "name": "<xsl:value-of select="name" />",
    "text": "<xsl:value-of select="text" />"
    }
  </xsl:template>
</xsl:stylesheet>

输出

{
    "name": "Some Title",
    "text": "&lt;p&gt;A dizzying array of deep, robust color, the Hugs and Kisses bouquet contains one dozen tulips and one dozen iris, fresh from the fields. It's an always-impressive bouquet perfect for a &quot;dinner for two,&quot; a special someone's birthday, or anytime you want to make someone's heart race&lt;./p&gt;;"
}

【问题讨论】:

  • 请编辑问题并提供足够的信息,以便每个人都可以重现问题。除了 XML 文档和想要的结果,我们还需要:1. 完整的 XSLT 代码(尽可能小),2. 您得到的实际结果。

标签: xslt xslt-1.0


【解决方案1】:

如果是生成JSON,不要使用disable-output-escaping,使用文本输出方式:

<xsl:output method="text"/>

使用文本输出方式,没有转义,因此无需禁用它。

我不知道这是否解决了换行符的问题,因为我不知道是什么导致了这个问题。

【讨论】:

    【解决方案2】:

    好吧,如果你想分别生成 Javascript 代码和 JSON 代码,那么只需使用&lt;xsl:output method="text"/&gt;,这样转换结果中的任何字符都不会被转义,当然也就不需要使用 disable-output-escaping。

    另一方面,我不明白为什么 disable-output-escaping 应该产生换行符,所以如果您仍然有问题,请考虑向我们展示 XML 输入、XSLT 代码、您想要的结果和结果等详细信息你会得到,以及你使用的 XSLT 处理器。

    【讨论】:

    • 我在我的问题中添加了示例。问题宽度 替换它们
    • 当我尝试使用 Saxon 6.5.5 之类的 XSLT 1.0 处理器运行您的示例时,我得到了.. "text": "&lt;p&gt;A dizzying array of deep, ..,因此没有进行转义。您能否告诉我们您使用的是哪种 XSLT 处理器,您如何使用它(您使用哪些 API 调用或命令行界面)以及您如何看待转换结果?据我所知,您的 XSLT 代码很好,所以问题可能在于说服 XSLT 处理器使用 text 方法进行序列化。
    • 我对 libxml2-xslt 也有同样的问题:disable-output-escaping 插入换行符,&lt;xsl:output method="text"/&gt; 对转义没有任何作用
    猜你喜欢
    • 2023-03-17
    • 2015-06-08
    • 2010-11-11
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多