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。