1
文本在下面的XML:的XPath:具有特殊儿童回归节点,但没有自己的
<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。
非常感谢:这太棒了。 –
我认为这也适用,简单地说最后一个条件有点:'p [count(hi)= count(hi [contains(@rend,'bold')])and not(normalize-space(text()))]] ' –
不,它不起作用。 text()选择一个节点集,而normalize-space()接受一个字符串作为参数。因此,XPath使用string()函数将节点集转换为字符串,并且此函数返回节点集中节点的字符串值,该节点集首先按文档顺序排列。请参阅http://www.w3.org/TR/xpath/#section-String-Functions – Erlock