首页 > 解决方案 > 仅使用 HtmlAgilityPack 从 SelectNode 中获取一些内部文本

问题描述

我一直在使用 HtmlAgilityPack 来解析网页中的一些 html。当前的 html 如下所示:

div class="price__child price__price flex-child__auto tooltip-container">
                                    <div class="price__min-order tooltip-container js-minOrder">
                                        <i>⚠️</i>
                                        <div class="price__min-order-tooltip tooltip">
                                            Minimum order of $15.00.
                                        </div>
                                    </div>

                                $1.75
                        </div>

我只想在最后检索价格文本,在本例中为$1.75. 执行以下操作将返回该数字,以及较大 div 中的所有其他文本。

return node
                .SelectSingleNode(".//div[contains(@class, 'price__child price__price')]")
                .InnerText
                .Trim().Replace(" ", "")
                .TrimStart('$');

有没有办法从price__min-order tooltip-container js-minOrder和中排除/不获取内部文本price__min-order-tooltip tooltip,并且只1.75从较大的 div 中获取?

标签: c#.nethtml-agility-pack

解决方案


我找到了方法。如果您调用子节点并删除,它将摆脱它。

var priceNode = node
                .SelectSingleNode(".//div[contains(@class, 'price__child price__price')]")
                ?.ChildNodes[1];
            priceNode?.Remove();

            return node
                .SelectSingleNode(".//div[contains(@class, 'price__child price__price')]")
                .InnerText
                .Trim().Replace(" ", "")
                .TrimStart('$');

推荐阅读