在阅读了关于检测空节点的最相关的Xpath问题之后,我仍然找不到第一个非空元素。数据集如下所示:
<div>
<p>
<elem> </elem>
</p>
<p>
<elem> </elem>
</p>
<p>
<elem> </elem>
</p>
<p>
<elem>   </elem>
</p>
<p>
<elem>Application</elem>
</p>
<p>
<elem>Other text that should not be detected.</elem>
</p>
<p>
<elem> </elem>
</p>
<p>
<elem>Second application</elem>
</p>
</div>
基本上不应考虑空元素,我们只想检测第一个Application
元素。我们已经使用normalize-space
及相关功能进行了大量测试,但无法正常使用。
主要问题是空元素。我们现在的检查完美地解决了定位,但是一旦html包含
元素就失败了:
/div/p[position() < 3]//*[normalize-space()='Application']
那么,我们怎样才能忽略空元素呢?这只能通过两者之间的额外步骤来实现吗?
答案 0 :(得分:0)
在我的定义中,空元素没有任何子节点,因此normalize-space
将按该定义选择所有空元素。如果您想允许某些文字内容,则可以在删除后检查//*[not(*) and not(normalize-space(translate(., ' ', '')))]
,例如translate
。基本上,在使用normalize-space检查之前,您需要将所有字符列为要删除的// npm install --save-dev gulp merge-stream
var gulp = require('gulp');
var merge = require('merge-stream');
gulp.task('test', function() {
var bootstrap = gulp.src('bootstrap/js/*.js')
.pipe(gulp.dest('public/bootstrap'));
var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
.pipe(gulp.dest('public/jquery'));
return merge(bootstrap, jquery);
});
调用的第二个参数。我编写的XPath表达式可以在XSLT中工作,其中数字字符引用由XML解析器解析,通常它取决于您使用XPath的宿主语言以及如何转义字符。