使用HTMLAgilitypack获取数据

时间:2016-09-24 05:06:48

标签: html vb.net html-agility-pack

<ol class="list-data-b">
<li class="in-ttl-b">(a) kanji; a Chinese character [ideograph]
    <ul class="list-data-b-in"><li class="text-jejp text-c"><span class="ex">漢字で書く</span></li><li class="text-jeen text-c">write in <i>kanji</i> [<i>Chinese characters</i>]</li></ul>
    <ul class="list-data-b-in"><li class="text-jejp text-c"><span class="ex">常用漢字</span></li><li class="text-jeen text-c"><i>Chinese characters</i> for everyday use (in Japan)</li></ul>
</li>
</ol>

我有这样的HTML,我如何获得数据的一部分:

  • (a)汉字;中文字符[表意文字]
  • 汉字で书く
  • 用汉字写[汉字]
  • 常用汉字
  • 日常用汉字(日本)

这是我的代码。

Dim node2 = HTMLDoc.DocumentNode.SelectNodes("//ul[@class='list-data-b-in']")
        If node2 IsNot Nothing Then
            For Each node In node2
                Dim Japnodes As HtmlAgilityPack.HtmlNode = node.SelectSingleNode("//li[@class='text-jejp text-c']")
                txtMean.AppendText(Japnodes.InnerText)
                txtMean.AppendText(vbNewLine)
                Dim Engnodes As HtmlAgilityPack.HtmlNode = node.SelectSingleNode("//li[@class='text-jeen text-c']")
                txtMean.AppendText(Engnodes.InnerText)
                txtMean.AppendText(vbNewLine)
            Next

1 个答案:

答案 0 :(得分:0)

可以按照your previous question中的说明选择第一个文本。现在要获取每对中文/日文 - 英文文本,您可以遍历ul元素,然后从每个ul获取包含目标文本的两个元素。

这是一个控制台应用程序演示:

Dim lis = HTMLDoc.DocumentNode.SelectNodes("//li[@class='in-ttl-b']")
For Each li As HtmlNode in lis 
    Dim txt = li.SelectSingleNode("text()[1]")
    Console.WriteLine(txt.InnerText)
    For Each ul As HtmlNode in li.SelectNodes("ul")
        Dim japNode = ul.SelectSingleNode("li/span")
        Dim engNode = ul.SelectSingleNode("li[@class='text-jeen text-c']")

        Console.WriteLine(japNode.InnerText)
        Console.WriteLine(engNode.InnerText)
    Next
Next

<强> dotnetfiddle demo

输出

(a) kanji; a Chinese character [ideograph]

漢字で書く
write in kanji [Chinese characters]
常用漢字
Chinese characters for everyday use (in Japan)