disable-output-escaping无法正常工作

时间:2013-07-18 16:44:34

标签: xslt xslt-1.0

我有一些XML

<p>Lorem ipsum dolor sit amet,<unclear reason="illegible"/> elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris <unclear reason="illegible"/> ex ea 
commodo consequat. Duis aute irure dolor in reprehenderit in 
voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
<unclear reason="illegible"/> non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum</p>

当我尝试并运行时

<xsl:value-of select="/p" disable-output-escaping="yes"/> 

它不会返回xml标记。如何在查询值中包含标记?

我希望它能在整个文本中包含一些内容来识别文本中不清楚的标签。

1 个答案:

答案 0 :(得分:1)

这是正确的,根据定义,value-of元素是其所有后代文本节点的串联。您不能“将标记包含在查询值中”,但您可以使用copy-of代替value-of将整个p元素复制到输出,包括其子项(文本节点)和元素)

<xsl:copy-of select="/p" />

或者如果您想要p元素的内容而不是周围的<p></p>标记(例如,如果您将内容插入另一个元素),那么

<xsl:copy-of select="/p/node()" />

如果您想将unclear元素转换为其他元素而不是按原样包含它们,那么您可能希望使用基于身份模板的转换

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <!-- copy everything from input to output verbatim, except where
       a more specific template applies -->
  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
  </xsl:template>

  <!-- handle unclear elements differently -->
  <xsl:template match="unclear">
    <xsl:text>__UNCLEAR__</xsl:text>
  </xsl:template>
</xsl:stylesheet>

鉴于您的样本输入,这将产生

<p>Lorem ipsum dolor sit amet,__UNCLEAR__ elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris __UNCLEAR__ ex ea 
commodo consequat. Duis aute irure dolor in reprehenderit in 
voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
__UNCLEAR__ non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum</p>