我正在使用mechanize / nokogiri并需要解析以下HTML字符串。 任何人都可以帮助我使用xpath语法来执行此操作或任何其他可行的方法吗?
<table>
<tr class="darkRow">
<td>
<span>
<a href="?x=mSOWNEBYee31H0eV-V6JA0ZejXANJXLsttVxillWOFoykMg5U65P4x7FtTbsosKRbbBPuYvV8nPhET7b5sFeON4aWpbD10Dq">
<span>4242YP</span>
</a>
</span>
</td>
<td>
<span>Subject of Meeting</span>
</td>
<td>
<span>
<span>01:00 PM</span>
<span>Nov 11 2009</span>
<span>America/New_York</span>
</span>
</td>
<td>
<span>30</span>
</td>
<td>
<span>
<span>example@email.com</span>
</span>
</td>
<td>
<span>39243368</span>
</td>
</tr>
.
.
.
<more table rows with the same format>
</table>
我想将此作为输出
"4242YP","Subject of Meeting","01:00 PM Nov 11 2009 America/New_York","30","example@email.com", "39243368"
.
.
.
<however many rows exist in the html table>
答案 0 :(得分:4)
这样的事情?
items=doc.xpath('//tr').map {|row| row.xpath('.//span/text()').select{|item| item.text.match(/\w+/)}.map {|item| item.text} }
返回: =&GT; [[“4242YP”,“会议主题”,“01:00 PM”,“2009年11月11日”,“America / New_York”,“30”,“example@email.com”,“39243368”],[“ ABCDEFG“]]
选择仅包括以单词字符开头的跨距(例如,排除某些跨距的空白)。您可能需要针对特定情况优化“选择”过滤器。
我添加了一个包含包含abcdefg的span的极简主义行,以便您可以看到嵌套数组。
答案 1 :(得分:0)
如果您有一个XSL转换器,这里是转换输入的XSL的一部分:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="//tr"/>
</xsl:template>
<xsl:template match="tr">
"<xsl:value-of select="td/span/a/span"/>","<xsl:value-of select="td[position()=2]/span"/>","<xsl:value-of select="td[position()=3]/span/span[position()=1]"/>"
</xsl:template>
</xsl:stylesheet>
产生的输出如下:
"4242YP","Subject of Meeting","01:00 PM"
"4242YP","Subject of Meeting","01:00 PM"
(我复制了你的第一个表格行。)
XSL选择位让您可以清楚地了解XPATH输入所需的内容。