【问题标题】:XSLT: Have ampersand in an input string, how to escape itXSLT:在输入字符串中有与号,如何转义它
【发布时间】:2015-01-21 19:39:00
【问题描述】:

我有一个 XSLT 模板。它被调用,参数从 Java 程序发送给它。

问题是,其中一个变量包含'&'

<xsl:value-of select="customerName" />

customerName 可能包含'&amp;'。无论我做什么,我都无法让它渲染。我试过了

replace(customerName, '&', '&amp;')

有什么办法可以渲染出来吗?

【问题讨论】:

  • 如果customerName是参数,应该是&lt;xsl:value-of select="$customerName" /&gt;。注意$。你不需要在 Java 中替换任何东西。
  • 您的问题令人困惑。您提到“输入字符串”、“参数”和“其中一个变量”——但您的样式表指向源文档中的一个节点。如果那是(未转义的)&符号所在的位置,那么您的源文档不是 XML 并且不能由 XSLT 处理。如果它在一个参数中,那么它应该没有任何问题。

标签: java xslt xslt-2.0


【解决方案1】:

我能够解决这个问题。 基本上由于输入参数有一个'&',它是无效的xml。我不得不对其进行 xml 编码。

【讨论】:

  • 你的回答和你的问题一样不清楚。输入 参数 不必是有效的 XML。这是一个技术问题 - 使用准确的术语很重要。
【解决方案2】:

所以输入 java 参数集包含一个 &amp;amp;,输出需要一个 &amp;amp; 可能也是 XML。

然后使用顶部的output 元素来实现这一点。

<xsl:output method="xml"/>

替代品

您也可以尝试在 java 方面进行更正。当不使用 &amp;amp; 时,它应该与替换 &amp;amp; 一起使用。

customerName = customerName.replace(, "&", "&amp;");

在 XSLT 中,以下可能只是工作。

replace($customerName, '&amp;', '&amp;amp;')

【讨论】:

    【解决方案3】:

    要在 XSLT 环境中运行 XML,XML 应具有标准实体,即,仅允许使用 ISO 实体、Unicode 实体等。

    如果找到“&”,那么这些字符串应该以“;”结尾(实体表示是 &....;,即实体应该以分号结尾,那些应该是定义的实体)

    这里的'&'不是实体,'&'或 '&' 是一个实体。

    【讨论】:

      【解决方案4】:

      试试这个,

        <xsl:if test="contains($customerName,'&amp;')">
          <xsl:value-of select="concat(substring-before($customerName,'&amp;'),substring-after($customerName,'&amp;'))"/>
        </xsl:if>
      

      【讨论】:

      • 他不想移除它,他想渲染它。
      • 嗯,他正在使用 XSLT-2 的替换功能,该功能基本上删除了一个字符并在其位置放置另一个字符。这就是我以不同的方式所做的。 XML 主要用于携带数据,由于 & 是保留字符,因此需要转义或删除。
      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 2021-01-20
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2013-02-21
      相关资源
      最近更新 更多