在Web浏览器中获取特定级别的所有`tr`标记c#

时间:2015-02-23 15:41:26

标签: c# html webbrowser-control

这是一个示例html:

<form action="/opac-prod/search/briefListSearch.do" method="post" name="search_BrowseSearchHitsForm">
<table id="printTable" width="100%" align="center" dir="ltr">
    <tbody>
        <tr>
            <td style="font-family:tahoma;font-size:11px">
                <table border="0" align="right" cellspacing="0">
                    <tbody>
                        -- I want to get just this level tr tags , not in their children
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                        <tr></tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>

我想获取所有标记在tr但不是所有级别的html元素。我的意思是如果我使用foreach循环来执行此操作,我实际上无法做到这一点。因为我希望在最后tr标记中获取所有tbody标记(它们内部具有相同的代码),而不是在他们的孩子中。 我怎么能这样做?

我尝试使用此foreach循环,但它会在tr之后的每个LoopElement标记处继续:

var htmlElement = wb.Document.GetElementsByTagName("body")[0].GetElementsByTagName("form")[0].GetElementsByTagName("table")["printTable"];
            if (htmlElement != null)
            {
                var elements = htmlElement.GetElementsByTagName("tbody")[0].GetElementsByTagName("tr")[0].GetElementsByTagName("td")[0].GetElementsByTagName("table")[0].GetElementsByTagName("tbody")[0];
                foreach (HtmlElement element in elements.GetElementsByTagName("tr"))
                {
                    if (element.GetElementsByTagName("td")[0].GetElementsByTagName("table") != null)
                    {
                        try
                        {
                            var LoopElement =
                                element.GetElementsByTagName("td")[0].GetElementsByTagName("table")[0].GetElementsByTagName("tbody")[0].GetElementsByTagName("tr");
                            foreach (HtmlElement element1 in LoopElement)
                            {
                                 // This Loop 
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }
                }

1 个答案:

答案 0 :(得分:0)

<style>
tbody tr:first-of-type { 
    text-align: left; 
}
</style>

使用上面的代码来定位tbody的tr元素的第一个。

但是在您的代码中,您使用的是两个tbody标记,只需为其提供不同的ID firstsecond

然后你可以像这样定位second元素:

<style> 
#second tr:first-of-type { 
    text-align: left; 
}
</style>