我有一些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标记。如何在查询值中包含标记?
我希望它能在整个文本中包含一些内容来识别文本中不清楚的标签。答案 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>