我正在尝试选择一个文本包含3个以上具有特定值的注释的元素。
我试过了:
//*[count(self::comment()[. = "comment_text"]) > 3]
和
//*[count(comment()[. = "comment_text"]) > 3]
并且其变化没有成功。我做错了什么?
任何帮助都非常感激。
答案 0 :(得分:2)
您的方法适用于XSLT 2.0 - 您没有说明您正在使用哪个版本。
但是,通常的做法是将>
字符转义为gt
,并且必须注意嵌套引号(如果嵌套在双引号内,则引号必须为单引号,反之亦然)。
示例输入XML
<?xml version="1.0" encoding="utf-8"?>
<root>
<true><!--comment_text--><!--comment_text--><!--comment_text--><!--comment_text--></true>
<wrong1><!--comment_text--><!--comment_text--><!--comment_text--></wrong1>
<wrong2><!--comment_text--><!--comment_text--><!--comment_text--><!--wrong_text--></wrong2>
</root>
<强>样式表强>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[count(comment()[.='comment_text']) gt 3]">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<true/>
答案 1 :(得分:0)
如果xslt的版本是1.0以及您使用的方式,请使用以下表达式:
//*[count(comment()[. = 'comment_text']) > 3]