Xml 选择包含子节点且类包含X的节点

Xml 选择包含子节点且类包含X的节点,xml,xpath,xml-parsing,xpath-2.0,Xml,Xpath,Xml Parsing,Xpath 2.0,我得到了以下XML: <a> <div class="from ng-binding">Stranger</div> <div class="subject ng-binding">Hello there</div> <div class="time ng-binding"</div> </a> 但它没有选择任何东西。 我把它改成了//a[contains(./

我得到了以下XML:

  <a> 
    <div class="from ng-binding">Stranger</div>  
    <div class="subject ng-binding">Hello there</div>  
    <div class="time ng-binding"</div> 
  </a>
但它没有选择任何东西。 我把它改成了
//a[contains(.//div/@class,'from')]
,这样就行了,所以我不知道问题出在哪里。 不应该检查节点的所有子节点吗

//a[.//div[contains(@class, 'subject')]]
contains()函数只接受其第一个参数中的第一项,因此如果将
//div/@class
作为第一个参数传递给
contains()
,则只测试
//div/@class
的第一个结果,而不是测试所有结果

换句话说,您尝试的代码本质上等同于

//a[contains((.//div/@class)[1],'subject')]

仅供参考,XPath不选择任何标记。它在XML的逻辑结构(如元素)上运行,而不是在表面结构上运行。实际上,在XPath 2.0中(根据问号)
包含(.//div/@class,'from')
应该会引发类型错误,因为
的第一个参数contains
必须是一个不超过一个项的序列。@IanRoberts:XPath 2.0类型错误捕捉得很好。我本想查一下官方的参考资料,但没有查。我学习了XPath1.0,但从未完全更新过我的知识。
//a[contains((.//div/@class)[1],'subject')]