1

Nokogiriを使用して各列の最大長を取得するにはどうすればよいですか?

HTML の例:

<table>
 <tr>
  <td>ONE</td><td>TWO</td><td>THREE</td>
 </tr>
 <tr>
  <td>Monaco</td><td>Bangkok</td><td>Thailand</td>
 </tr>    
</table>

結果は、 each 内の文字列の長さになります<td>

<td>one</td> => 3
<td>two</td> => 3
<td>three</td> => 5
....
4

2 に答える 2

2

まず、tr/td の長さをマップします。

lengths = doc.search('tr').map{|tr| tr.search('td').map{|td| td.text.length}}
=> [[3, 3, 5], [6, 7, 8]]

それを転置して、列を取得し、それぞれから最大値だけを取得します。

lengths.transpose.map &:max
=> [6, 7, 8]
于 2012-09-17T08:05:27.630 に答える
0

純粋なワンライナー XPath 2.0 ソリューション、テーブルが規則的な構造を持っていると仮定します (各行には同じ数の列があります):

for $i in 1 to count(/*/tr[1]/td)
 return
    max(/*/tr/td[$i]/string-length())

XSLT 2.0 ベースの検証:

<xsl:stylesheet version="2.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:sequence select=
     "for $i in 1 to count(/*/tr[1]/td)
       return
          max(/*/tr/td[$i]/string-length())
     "/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<table>
    <tr>
        <td>ONE</td>
        <td>TWO</td>
        <td>THREE</td>
    </tr>
    <tr>
        <td>Monaco</td>
        <td>Bangkok</td>
        <td>Thailand</td>
    </tr>
</table>

XPath 式が評価され、この評価の結果が出力にコピーされます。

6 7 8
于 2012-09-17T12:41:57.043 に答える