0

我正在处理以下(示例)XML:

<?xml version="1.0"?>
<root>&amp; &amp; &amp;</root>

通过以下(示例)XSL:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0">
  <xsl:output
    method="html"
    version="4.0"
    encoding="UTF-8"
    omit-xml-declaration="yes"
    />
  <xsl:template match="/">
    <input value="{/root}" />
  </xsl:template>
</xsl:stylesheet>

使用 Python 和lxml( libxslt-1.1.17),我得到以下输出:

<input value="&amp;amp; &amp;amp; &amp;amp;" />

我知道我可以使用以下模板解决此问题:

  <xsl:template match="/">
    <input>
      <xsl:attribute name="value">
        <xsl:value-of 
          select="/root" 
          disable-output-escaping="yes" 
          />
      </xsl:attribute>
    </input>
  </xsl:template>

但这是很多打字。在 PHP 中使用过 XSL 后,我不记得曾经使用过这种变通方法来使用 short-form 取消引用 XML 实体value-of。是否有一个简短的解决方法,所以我们不必继续输入以上所有内容?

4

1 回答 1

1

DOE 实际上就是为这种情况而设计的。对不起,如果你知道,只是为了连续。

http://www.w3.org/TR/xslt#disable-output-escaping

通常,xml 输出方法在输出文本节点时会转义 & 和 <(可能还有其他字符)。这可确保输出是格式正确的 XML。但是,有时能够生成几乎是格式良好但不是格式良好的 XML 的输出是很方便的;例如,输出可能包括格式错误的部分,这些部分旨在通过后续的非 XML 感知过程转换为格式正确的 XML。出于这个原因,XSLT 提供了一种机制来禁用输出转义。xsl:value-of 或 xsl:text 元素可能具有 disable-output-escaping 属性...

我想真正的痛苦是你不能在属性值的表达式中使用 DOE,例如{disable-output-escaping(root)}.

所以,我想不出任何办法来缩短它。

于 2010-12-13T12:18:19.597 回答