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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Ruby 这个XPath表达式应该工作吗//测试/祖先::测试_Ruby_Xpath_Nokogiri - Fatal编程技术网

Ruby 这个XPath表达式应该工作吗//测试/祖先::测试

Ruby 这个XPath表达式应该工作吗//测试/祖先::测试,ruby,xpath,nokogiri,Ruby,Xpath,Nokogiri,我正在尝试查找包含子元素的所有tbody元素 我正在使用以下XPath表达式: //font[@color="red"]/ancestor::tbody 但它不起作用。它是否有效,或者这是我正在使用的库(或其他地方)的问题?我正在使用一个名为的Ruby库 我也试过了 //tbody[descendant::font[@color="red"]] 但是仍然不走运。此XPATH表达式将选择包含的所有tbody标记: 此XPATH表达式将选择包含的所有tbody标记: 我发现了问题:在我使用的文档

我正在尝试查找包含子
元素的所有
tbody
元素

我正在使用以下XPath表达式:

//font[@color="red"]/ancestor::tbody
但它不起作用。它是否有效,或者这是我正在使用的库(或其他地方)的问题?我正在使用一个名为的Ruby库

我也试过了

//tbody[descendant::font[@color="red"]]

但是仍然不走运。

此XPATH表达式将选择包含
的所有
tbody
标记:


此XPATH表达式将选择包含
的所有
tbody
标记:


我发现了问题:在我使用的文档的源代码中实际上没有
tbody
元素

我认为是因为我在Chrome的开发者工具中使用Elements标签浏览源代码,这个工具出于某种原因在其中添加了
元素

因此,下面的XPath表达式应该可以工作,如果源代码中确实存在适当的
tbody
元素,那么它就可以工作

//font[@color="red"]/ancestor::tbody

我发现了问题:在我使用的文档的源代码中实际上没有
tbody
元素

我认为是因为我在Chrome的开发者工具中使用Elements标签浏览源代码,这个工具出于某种原因在其中添加了
元素

因此,下面的XPath表达式应该可以工作,如果源代码中确实存在适当的
tbody
元素,那么它就可以工作

//font[@color="red"]/ancestor::tbody


第二个表达式应以
/
开头。第一个应该有效。您的文档中有名称空间吗?哎呀,实际上我忘了在第二个表达式(现已修复)之前加上两个斜杠
/
。所以,它仍然不起作用。不,文档中没有名称空间。第二个表达式应以
/
开头。第一个应该有效。您的文档中有名称空间吗?哎呀,实际上我忘了在第二个表达式(现已修复)之前加上两个斜杠
/
。所以,它仍然不起作用。不,文档中没有名称空间。Downvoter,我添加了缺少的
到XPATH表达式。这里的
/
函数是什么?@shiplu.mokadd.im:它查找当前元素的后代,在本例中是
tbody
标记。如果省略了
,查询将查找作为根节点后代的
font
标记“到XPATH表达式。这里的
/
函数是什么?@shiplu.mokadd.im:它查找当前元素的后代,在本例中是
tbody
标记。如果省略了
,查询将查找作为根节点后代的
font
标记。当您在Chrome中查看时,您会看到Chrome的“更正”标记:例如,如果html显示
单元格
,Chrome将提供缺少的
tbody
元素这就是为什么我们总是要求人们显示XML源代码的示例。@MichaelKay我可能会使用Chrome Developer工具复制源代码示例,不知道工具本身可以修改源代码:)诊断此类问题的正确方法是通过单独的路径下载HTML,并在不使用浏览器的情况下查看它。使用
curl
wget
,或使用OpenURI编写一个小的Ruby代码段,然后在文本编辑器(而不是文字处理器)中打开生成的HTML,查看到所需元素的真正HTML路径
tbody
之所以被添加,是因为浏览器试图满足规范。之所以被省略,是因为HTML的作者不在乎它是否符合规范。我们开始处理“损坏”的HTML。当你在Chrome中查看时,你会看到Chrome的“更正”标记:例如,如果HTML显示
单元格
,Chrome将提供缺少的
tbody
元素这就是为什么我们总是要求人们显示XML源代码的示例。@MichaelKay我可能会使用Chrome Developer工具复制源代码示例,不知道工具本身可以修改源代码:)诊断此类问题的正确方法是通过单独的路径下载HTML,并在不使用浏览器的情况下查看它。使用
curl
wget
,或使用OpenURI编写一个小的Ruby代码段,然后在文本编辑器(而不是文字处理器)中打开生成的HTML,查看到所需元素的真正HTML路径
tbody
被添加是因为浏览器试图满足规范。它被省略是因为HTML的作者不在乎它是否满足规范。我们开始处理“损坏的”HTML。