我需要显示给定节点的文本,同时禁止子节点的文本。我试图通过为子节点创建一个空模板来处理这个问题,但它没有用。如何压制子节点的文本?
这是XML:
URLLoader
这是我的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<item name="The Item">
<richtext>
<pardef/>
<par def="20">
<run>This text should </run>
<run>be displayed.
<popup><popuptext>This text should not be displayed.</popuptext></popup>
</run>
</par>
</richtext>
</item>
</document>
答案 0 :(得分:1)
您应该可以将select="."
更改为select="text()"
...
<xsl:template match="run">
<xsl:value-of select="text()"/>
</xsl:template>
此外,由于您未从run
执行申请模板,因此不需要匹配popuptext
的模板。
答案 1 :(得分:1)
如果您只想显示run
元素的文字,请使用select="text()"
:
<xsl:template match="run">
<xsl:value-of select="text()" separator=""/>
</xsl:template>
如果您使用select="."
,则会选择run
元素的所有内容,其中包含其子元素的内容。
我不确定这是100%最好的方法,但它确实会阻止run
的子元素内容在您的特定情况下显示。
我的完整版样式表是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes" method="html"/>
<xsl:template match="/*">
<html>
<body>
<table border="1">
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<tr>
<td><xsl:value-of select="@name"/></td>
<td>
<xsl:apply-templates/>
</td>
</tr>
</xsl:template>
<xsl:template match="run">
<xsl:value-of select="text()" separator=""/>
</xsl:template>
<xsl:template match="popuptext" />
</xsl:stylesheet>