XPath:选择一个包含3条以上注释的元素

时间:2014-02-04 12:34:10

标签: xml xslt xpath

我正在尝试选择一个文本包含3个以上具有特定值的注释的元素。

我试过了:

//*[count(self::comment()[. = "comment_text"]) > 3]

//*[count(comment()[. = "comment_text"]) > 3]

并且其变化没有成功。我做错了什么?

任何帮助都非常感激。

2 个答案:

答案 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']) &gt; 3]