Xpath:仅当一个子节点包含特殊字符串时才匹配节点
第一个样本:Xpath:仅当一个子节点包含特殊字符串时才匹配节点,xpath,Xpath,第一个样本: <ul class="breadcrumbs"> <li><a href="http://www.sample.com/1">Home</a></li> <li><a href="http://www.sample.com/2">Movies</a></li> <li><a href="http://www.sampl
<ul class="breadcrumbs">
<li><a href="http://www.sample.com/1">Home</a></li>
<li><a href="http://www.sample.com/2">Movies</a></li>
<li><a href="http://www.sample.com/3">Thrilling Action</a></li>
<li><strong>Armageddon</strong></li>
</ul>
摘录电影
——但我也希望它能摘录惊险动作
说明:如果第二个-tag的-tag包含字符串“Movies”或“Cool Gadgets”,我想提取第二个和第三个-tag的-tag
/html//ul[@class='breadcrumbs']/li[2]/a
/html//ul[@class='breadcrumbs']/li[3]/a
如果li[2]不包含“电影”或“酷小玩意”,我不想提取任何东西 如果我答对了,如果其中一个
包含特殊字符串,您希望匹配
中的所有标记。您可以使用:
//ul[@class=“breadcrumbs”和(li[2]/a/text()=“Movies”或li[2]/a/text()=“Cool Gadgets”)]/li[position()>1]/a/text()
解释
1) 第一部分,//ul[@class=“breadcrumbs”和(li[2]/a/text()=“Movies”或li[2]/a/text()=“Cool Gadgets”)
将检查您是否处于符合您需要的标签中
@class=“breadcrumbs”
执行您可能期望的操作,如果您的筛选字符串存在,li[2]/a/text()=“Movies”或li[2]/a/text()=“Cool Gadgets”
将返回true
当然,如果需要,您可以将a/text()=“Movies”
更改为a[contains(text(),“Movies”)]
2) 一旦我们知道我们在正确的位置,我们所要做的就是选择您想要的字段。这是由li[position()>1]
完成的,它将捕获除第一个以外的所有
。选择文本,你就可以开始了 与此文档关联的文档类型声明(请参见DocumentType
)
- 对于没有文档类型声明的XML文档,这将返回null李>
- 对于HTML文档,可以返回DocumentType对象,与HTML文档中是否存在文档类型声明无关李>
这样可以直接访问此文档的子节点DocumentType
节点。可以在文档创建时设置此节点,然后通过使用子节点操作方法(如node.insertBefore
或node.replaceChild
)更改此节点
但是,请注意,尽管一些实现可能会根据创建时指定的文档类型实例化不同类型的文档对象,这些对象支持“核心”以外的其他功能,例如“HTML”[DOM Level 2 HTML]
,但随后更改文档类型不太可能导致所支持的功能发生更改。
好极了!我正在为如何做一个(self | following sibling::)
子选择而绞尽脑汁,这样效果更好。虽然在使用li[2]/a/text()
而不是li/a/text()
时,它可能更正确地回答了这个问题。是的,它确实可以避免误报。编辑。
/html/body//ul[@class='breadcrumbs']/li[2]/a[contains(., 'Movies') or contains(., 'Cool Gadgets')]
/html//ul[@class='breadcrumbs']/li[2]/a
/html//ul[@class='breadcrumbs']/li[3]/a