XSL使用`disable-output-escaping`缩短`value-of`?

时间:2010-12-13 11:22:40

标签: python xslt lxml libxslt

我正在处理以下(示例)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和lxmllibxslt-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之后,我不记得使用短格式value-of来解决XML实体的问题。是否有一个简短的解决方案,所以我们不必继续输入以上所有内容?

1 个答案:

答案 0 :(得分:1)

DOE实际上被设计为用于此类案件。对不起,如果您知道,只是为了连续。

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

  

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

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

所以,我想不出任何缩短这个的方法。

相关问题