Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath:仅当一个子节点包含特殊字符串时才匹配节点_Xpath - Fatal编程技术网

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