Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Html 使用XPath选择包含特定类的表_Html_Xml_Xpath - Fatal编程技术网

Html 使用XPath选择包含特定类的表

Html 使用XPath选择包含特定类的表,html,xml,xpath,Html,Xml,Xpath,我需要使用XPath选择一个HTML表。该表可能包含多个类,也可能不包含多个类,但我只想要包含特定类的表 以下是一个示例HTML代码段: <html> <body> <table class="no-border"> <tr> <th colspan="2">Blah Blah Blah</th> </tr> <tr> &

我需要使用XPath选择一个HTML表。该表可能包含多个类,也可能不包含多个类,但我只想要包含特定类的表

以下是一个示例HTML代码段:

<html>
  <body>
    <table class="no-border">
      <tr>
        <th colspan="2">Blah Blah Blah</th>
      </tr>
      <tr>
        <td>Content</td>
        <td>
          <table class="info no-border">
            <tr>
              <!-- Inner table content -->
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>
</html>

废话连篇
内容
我需要使用XPath只检索包含类
info
的表。我尝试过使用
/html/body/table/tr/td/table[@class='info*']
,但这不起作用。我试图检索的表可能存在于HTML文档中的任何地方——从技术上讲,不是任何地方,但在外部表和内部表之间可能存在不同层次的层次结构


如果有人能给我指出正确的方向,我将不胜感激。

您能做的最接近的事情就是使用
包含
功能:

//table[contains(@class,'info')]

但是请注意,这将捕获一个包含类
信息
的表,或者任何其他包含
信息
子字符串的表。据我所知,XPath无法区分整词匹配。因此,您必须过滤结果以检查这种可能的情况。

最接近的方法是使用
contains
函数:

//table[contains(@class,'info')]

但是请注意,这将捕获一个包含类
信息
的表,或者任何其他包含
信息
子字符串的表。据我所知,XPath无法区分整词匹配。因此,您必须过滤结果以检查这种可能的情况。

XPath 1.0在字符串处理方面确实相当有限。您可以使用
start-with()
substring()
和类似函数执行少量处理。有关创建类似于正则表达式的内容,请参见


XSLT2.0(并非所有浏览器和软件都支持)支持regex。

XPath 1.0在字符串处理方面确实相当有限。您可以使用
start-with()
substring()
和类似函数执行少量处理。有关创建类似于正则表达式的内容,请参见


XSLT2.0(并非所有浏览器和软件都支持)支持regex。

理想情况下,您需要一个CSS选择器,如
table.info
。一些用于XML/HTML解析的XPath引擎和工具包确实支持这些选择器,这些选择器在内部被转换为XPath表达式,例如,如果您使用Python并且包含在
lxml
中,或者Ruby的
Nokogiri
中,则将其转换为XPath表达式

在一般情况下,要使用XPath模拟CSS选择器(如
table.info
),常见的技巧或模式是使用
contains()
concat()和空格字符组合。在您的情况下,它看起来是这样的:

.//table[contains(concat(' ', normalize-space(@class), ' '), ' info')]

理想情况下,您需要一个CSS选择器,如
table.info
。一些用于XML/HTML解析的XPath引擎和工具包确实支持这些选择器,这些选择器在内部被转换为XPath表达式,例如,如果您使用Python并且包含在
lxml
中,或者Ruby的
Nokogiri
中,则将其转换为XPath表达式

在一般情况下,要使用XPath模拟CSS选择器(如
table.info
),常见的技巧或模式是使用
contains()
concat()和空格字符组合。在您的情况下,它看起来是这样的:

.//table[contains(concat(' ', normalize-space(@class), ' '), ' info')]

我知道你没有要求这个答案,但我认为这将有助于你使你的问题更加准确

//table[ (contains(@class,"result-cont") or contains(@class,"resultCont")) and not(contains(@class,"hide")) ]

这将得到包含“result cont”或“resultCont”的类,并且没有“hide”类。

我知道您没有要求这个答案,但我认为它将帮助您使查询更精确

//table[ (contains(@class,"result-cont") or contains(@class,"resultCont")) and not(contains(@class,"hide")) ]

这将得到包含“result cont”或“resultCont”的类,并且没有“hide”类。

这使我比以前走得更远。如果没有人提供更优雅的解决方案,我会将此作为公认的答案。非常感谢,伙计!这让我比以前走得更远了。如果没有人提供更优雅的解决方案,我会将此作为公认的答案。非常感谢,伙计!