Ruby Nokogiri解析HTML表

Ruby Nokogiri解析HTML表,ruby,nokogiri,mechanize,Ruby,Nokogiri,Mechanize,我正在使用mechanize/nokogiri,需要解析出以下HTML字符串。 有谁能帮助我使用xpath语法来完成这项工作,或者其他任何可行的方法吗 <table> <tr class="darkRow"> <td> <span> <a href="?x=mSOWNEBYee31H0eV-V6JA0ZejXANJXLsttVxillWOFoykMg5U65P4x7FtTbsosKRbbBPuYvV8n

我正在使用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>

会议主题
下午1:00
2009年11月11日
美国/纽约
30
example@email.com
39243368
.
.
.
我想要这个作为输出

"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>
“4242YP”,“会议主题”,“2009年11月11日美国/纽约下午1:00”,“30”example@email.com", "39243368"
.
.
.
像这样的东西

items=doc.xpath('//tr').map {|row| row.xpath('.//span/text()').select{|item| item.text.match(/\w+/)}.map {|item| item.text} }
返回: =>[“4242YP”,“会议主题”,“下午1:00”,“2009年11月11日”,“美国/纽约”,“30”example@email.com“,“39243368”],[“abcdefg”]]

选择仅包括以单词字符开头的跨距(例如,不包括某些跨距的空白)。您可能需要针对您的具体情况优化“选择”过滤器


我添加了一个极简行,其中包含一个包含abcdefg的span,这样您就可以看到嵌套数组。

如果您有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>
(我复制了您的第一个表格行)


XSL select位让您很好地了解了获取其余部分所需的XPATH输入。

没有完全使用您的示例,但它让我思考了不同的方法。谢谢你的帮助!是的,我只能猜测HTML格式的可预测性,以及嵌套跨距的连接有多重要,所以我想你可以从一些极简主义的东西开始工作。
"4242YP","Subject of Meeting","01:00 PM"
"4242YP","Subject of Meeting","01:00 PM"