XSLT或XPATH:测试/ <div> </div>

时间:2015-01-15 14:59:38

标签: xslt xpath

我想测试html <body>的条件,紧接着是<div>,因为它们之间没有任何内容。

这是一个不起作用<xsl:if test="//div[preceding::*[1][self::body]][1]">的例子。其他路径语句在文档的更深处<divs>错误地命中。

我在XSLT 2.0和Xpath 2或3中工作。

2 个答案:

答案 0 :(得分:1)

所以你想找到div的第一个子元素的任何body元素吗?

//div[parent::body][not(preceding-sibling::*)]

如果您要求div元素是body的第一个子节点(不仅仅是第一个子元素,那么没有文本节点或注释在开场<body><div>之间,您可以使用

//div[parent::body][not(preceding-sibling::node())]

一个改进是允许两个开始标记之间的空格,但不允许非空白文本节点:

//div[parent::body][not(preceding-sibling::*)]
                   [not(preceding-sibling::text()[normalize-space()])]

(如果您的样式表执行<xsl:strip-space elements="*"/>,则无需完全忽略仅限空白的文本节点。

答案 1 :(得分:1)

如果您使用body/node()[1][self::div],则检查body元素的第一个子节点是div元素。