在以下XML中:
<document>
<p rend="Default Style"><hi rend="bold italic">This one</hi></p>
<p rend="Default Style"><hi rend="bold italic">Not this one</hi> please</p>
<p rend="Default Style"><hi rend="italic">Not this one either</hi></p>
<p rend="Default Style"><hi rend="bold">Not this one either</hi><hi rend="italic">Not this one either because it has others</hi></p>
<p rend="Default Style"><hi rend="bold italic">This one</hi> <hi rend="bold italic">because it is all bold</hi></p>
</document>
我想选择包含以下内容的P元素:
这应该意味着我只获得其连接内容为hi标签的段落,其rend属性包含“bold”。
我尝试了各种方法。最接近的似乎是:
//p[hi[contains(@rend, "bold")] and not(text()) and not(*[not(self::hi[contains(@rend, "bold")])])]
然而,not(text())方面并不像我想的那样工作。在P标签本身(上面的条件#2)中有文本的行未得到满足。
我尝试过,作为其他条件:
和其他几个人。
非常感谢任何帮助。我正在使用XSLT 1.0。
答案 0 :(得分:3)
hi元素之间的空格是有效的文本节点。使用normalize-space()过滤它们。
p[count(hi) = count(hi[contains(@rend, 'bold')]) and not(text()[normalize-space()!=''])]