3

我有一个 html 文档,我需要table在 5th 表深处抓取所有元素,DOM不要与第 5 个孩子混淆table。我的问题是这 5 个table深度结构可以包含在任意数量的div元素中,所以我不能使用绝对路径,例如

/html/body/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table

例如:

<body>    
    <table>    
        <table>
            <table>
                <table>
                   <!--Grab this one -->
                   <table>
                   </table>
                </table>
            </table>
       </table>
    </table>
</body>

或这个:

 <body> 
    <div> <!--Could be wrapped more than just once though -->  
        <table>    
            <table>
                <table>
                    <table>
                       <!--Grab this one -->
                       <table>
                       </table>
                    </table>
                </table>
           </table>
        </table>
    </div>
</body>
4

4 回答 4

4

使用

(//table[count(ancestor::table) = 4])[1]

这将选择table文档中恰好具有四个名为 的祖先的第一个table

于 2012-11-21T20:37:31.410 回答
3

我相信你会想要//每个元素之间的表达式,使完整的表达式:

//table//table//table//table//table

这将选择在其路径中任何位置有 4 个表的任何表

于 2012-11-21T20:04:31.017 回答
1

对于 mshtml(因为您的问题是 c# 和 html 标记)访问 html 子节点元素的方式类似于此处提到的内容: 如何在 C# 中以最快的方式检索 HTMLDocument 的所有文本节点?

也许这有帮助!

于 2013-11-15T17:35:33.220 回答
1
XElement doc = XElement.Parse(yourXml); 
var requiredTable = doc.Descendants("table").ElementAt(4);
于 2012-11-21T20:13:17.850 回答