【问题标题】:Get all table tr data in single HtmlNodeCollection c#在单个 HtmlNodeCollection c# 中获取所有表 tr 数据
【发布时间】:2018-09-13 09:13:52
【问题描述】:

我需要使用 HTML Agility Pack 从所有表中检索所有 tr

HTML:

<section class="content-section" id="more">
    <div class="row">
        <div class="col-xs-6"></div>
        <div class="col-xs-6">
            <h2>Specs</h2>
            <div>
                <div>
                    <table>
                        <thead>
                            <tr><th colspan="2"> test</th></tr>
                        </thead>
                        <tbody>                         
                            <tr><td>2</td><td>b</td></tr>
                            <tr><td>1</td><td>a</td></tr>
                        </tbody>
                    </table>                                    
                    <table>
                        <tbody>
                            <tr><td>3</td><td>c</td></tr>
                            <tr><td>4</td><td>d</td></tr>               
                        </tbody>
                    </table>
                </div>              
            </div>
        </div>      
    </div>  
</section>

C#:

HtmlNodeCollection featuresNode = document.DocumentNode.SelectNodes("//*[@id='more']/div/div[2]/div/div[1]/table/tbody/tr");

我只能获得第一张桌子tr,但无法获得HtmlNodeCollection 中的所有两张桌子tr

【问题讨论】:

  • 我在尝试您的代码时获得了 4 个tr 节点。对不对?
  • @krlzlx 请检查更新的 html。

标签: c# web-scraping html-agility-pack


【解决方案1】:

要获取所有 tr 节点,包括 thead 中的节点,请将您的 XPath 更新为:

"//*[@id='more']/div/div[2]/div/div[1]/table//tr"

这个简化的XPath 也应该可以工作:

"//*[@id='more']//tr"

如果您只想要来自tbodytr,请使用:

"//*[@id='more']//tbody//tr"

或从thead 中排除tr,使用:

"//*[@id='more']//tr[not(ancestor::thead)]"

【讨论】:

  • 我得到了所有的 tr,但它可能不包括 thead tr 吗?
  • @AnupPatil:查看我的更新。但如果这就是你想要的,你的 XPath 也可以工作:"//*[@id='more']/div/div[2]/div/div[1]/table/tbody/tr"
  • @AnupPatil:太好了!很高兴能帮到你。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
相关资源
最近更新 更多