Ruby 解析前一个<;td>;元素的属性(忽略中间的其他元素)

Ruby 解析前一个<;td>;元素的属性(忽略中间的其他元素),ruby,html-parsing,nokogiri,Ruby,Html Parsing,Nokogiri,我有一个非常长的HTML文件和许多不同的表。我只想解析某些表,但不幸的是,标记在这里没有帮助 我要分析的表如下所示: <tr> <td> TEXT1 </td> <td> <a class='unique identifier' ...> TEXT2 </a></td> </tr> 注意:有时“TEXT1”在标记中,有时不是。有时它后面还有其他标记,如s或s或,等等。我想我需要在找到的每个之后获取前

我有一个非常长的HTML文件和许多不同的表。我只想解析某些表,但不幸的是,
标记在这里没有帮助

我要分析的表如下所示:

<tr>
<td> TEXT1 </td>
<td> <a class='unique identifier' ...> TEXT2 </a></td>
</tr>
注意:有时“TEXT1”在
标记中,有时不是。有时它后面还有其他标记,如
s或

s或
,等等。我想我需要在找到的每个
之后获取前面的
内容,但忽略中间的任何其他元素

我怎样才能告诉Nokogiri,对于我找到的每一个“TEXT2”,我都会返回并获取上一个
,这样我就可以获取“TEXT1”?

我会这样做:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<tr>
<td> TEXT1 </td>
<td> <a class='uid'> TEXT2 </a></td>
</tr>
EOT

wrapping_tr = doc.at('//a[@class="uid"]/../..')
nodes = wrapping_tr.search('td')

nodes.map(&:text) 
# => [" TEXT1 ", "  TEXT2 "]
需要“nokogiri”

doc=Nokogiri::HTML(这怎么会是重复的?在那里你可能会找到一种获取tr元素的方法,这不是我的问题。你读过我要求的内容吗?是的。要获取这两个文本,你需要一种方法在树上(回到“a”的父级)因此,当你到达tr时,你将拥有两个tds,因此你将能够访问这两个文本。这不是你想要的吗?对不起。尽管存在相同的问题,但这个问题的答案并不适合你的需要。非常感谢!但是:如果在
包装中,有我的
//a[@class=“uid”]
,那么为什么我又在里面寻找一个
?或者我遗漏了什么?
放置
只给我
文本2
如果在“包装”中有我的“//a[@class=“uid”]”
“那么你是说你的例子不准确,不足以解释问题吗?你读过吗?”不,你引用得很好。但是我们似乎正在
文本2
中搜索
。但是我们不需要深入,可以说,我们需要再次向上。你明白我的意思吗,还是我误解了什么?顺便说一句,再次感谢你,作为一个初学者,你在这里帮了我很多忙!!e的输出是吗示例代码显示您要求的结果?如果是这样,那么它似乎做了正确的事情。如果是这样,您可能应该阅读文档,特别是关于
/
如何在XPath中工作。
这些是实现此目的的关键。嘿!不,不是。
包装\u tr=doc.at('//a[(@class=“uid”)'))
给我
TEXT2
。之后的所有内容都没有内容。
require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<tr>
<td> TEXT1 </td>
<td> <a class='uid'> TEXT2 </a></td>
</tr>
EOT

wrapping_tr = doc.at('//a[@class="uid"]/../..')
nodes = wrapping_tr.search('td')

nodes.map(&:text) 
# => [" TEXT1 ", "  TEXT2 "]