jsoup解析html的table中的内容

html-css06

jsoup解析html的table中的内容,第1张

public void parse(){

String htmlStr = "<table id=kbtable >"

+ "<tr>"

+ "<td width=123>"

+ "<div id=12>这里是要获取的数据1</div>"

+ "<div id=13>这里是要获取的数据2</div>"

+ "</td>"

+ "<td width=123>"

+ "<div id=12>这里是要获取的数据3</div>"

+ "<div id=13>这里是要获取的数据4</div>"

+ "</td>"

+ "</tr>"

+ "</table>"

Document doc = Jsoup.parse(htmlStr)

// 根据id获取table

Element table = doc.getElementById("kbtable")

// 使用选择器选择该table内所有的<tr><tr/>

Elements trs = table.select("tr")

//遍历该表格内的所有的<tr><tr/>

for (int i = 0i <trs.size()++i) {

// 获取一个tr

Element tr = trs.get(i)

// 获取该行的所有td节点

Elements tds = tr.select("td")

// 选择某一个td节点

for (int j = 0j <tds.size()++j) {

Element td = tds.get(j)

// 获取td节点的所有div

Elements divs = td.select("div")

// 选择一个div

for (int k = 0k <divs.size()k++) {

Element div = divs.get(k)

//获取文本信息

String text = div.text()

//输出到控制台

System.out.println(text)

}

}

}

}

除了正则之外,还有一个方法就是XSL解析,

例如您的这个我可以使用此XSL文件解析。

<?xml version="1.0" encoding="utf-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

  <xsl:template match="/">

    <Content>

      <xsl:value-of select="//div[@class='skcx_B']"/>

    </Content>

  </xsl:template>

</xsl:stylesheet>

当然,您要排除唯一性,就是说class中的skcx_B只在这里有,如果其他地方有,可以使用这种方法获取

<xsl:value-of select="//div[@class='skcx_B'][1]"/>

这个[1]是指<div class="skcx_B"></div>处在第几个位置,

记住:这个是从1开始的,并不是从0开始的。

嗯,差不多是这样的,因为网页在读取table数据的时候,要将table内的所有td tr tbody 这些内容数据下载完后才会显示出来,而DIV就不一样了,它是读一个就显示一个,效率当然高多了。