如何选择多个标签

时间:2011-02-17 16:18:58

标签: .net html dom

我有这段代码

<div id="teste">
<table>
<tbody>
<tr> "Lots of HTML TAGS ex: img, href, etc" </tr>
<tr> "Lots of HTML TAGS" </tr>
<tr> "Lots of HTML TAGS" </tr>
<tr> "Lots of HTML TAGS" </tr>
</tbody>
</table>
</div>

在TR内部还有很多其他代码.. 有时TR增加:例如:Page 1有5 tr |第2页有8 tr

我想把div里面的所有TR“teste”-table-tbody ... 那就是..

我在尝试

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

我想捕获所有TR标签,包括TR

内的其他Html标签

这里是使用的代码

<td align="left" class="portal_table_info_th">
   <div id="teste" style="display:inline;" class="smallfont">
      <table width="100%" border="0" cellspacing="2" cellpadding="0">
         <tbody>

           <tr>
           <td class="smallfont alt2">
           <b><center>TUTORIAL CSS</center></b>
           </td>
           <td width="30" class="smallfont">
           <span style="color:#000000; font-weight:bold">STATUS</span>
           </td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 1</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt2"><center><a href="" target="_blank">Tutorial 2</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 3</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt2"><center><a href="" target="_blank">Tutorial 4</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 5</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>

        </tbody>
   </table>
  </div>
</td>

这是其他信息...... 当我把

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

不要工作,返回空值。 但是,当我投入

doc.DocumentNode.SelectNodes("//div[@id='teste']");

它的作品......:/,但是需要所有标签。

我尝试使用它,我的文档是 - (数据是HttpGET)

doc = new HtmlDocument();
doc.LoadHtml(data);
.
.
.
HtmlNodeCollection trtag = doc...
string trtag = doc...

3 个答案:

答案 0 :(得分:1)

两个问题:

1)在id的值周围添加引号,否则它将不是有效的xml标记,即id =“teste”(这是问题的第一个原因,一旦改变,你将获得节点)

2)删除*。

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

应该有效..

修改 要提取除最后一个节点之外的所有tr节点,请使用xpath "//div[@id='teste']/table/tbody/tr[position()<last()]"(注意[position())

提取节点并转换为字符串的示例。

static void ExtractNodeInfo()
        {
            String xmlText = @"<div id=""teste""> <table> <tbody> <tr> ""Lots of HTML TAGS ex: img, href, etc"" </tr> <tr> ""Lots of HTML TAGS"" </tr> <tr> ""Lots of HTML TAGS"" </tr> <tr> Last ""Lots of HTML TAGS"" </tr> </tbody> </table> </div> ";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlText);
            XmlNode root = doc.DocumentElement;
            XmlNodeList nodes = root.SelectNodes("//div[@id='teste']/table/tbody/tr[position()<last()]");
            StringBuilder selectedNodesOuter = new StringBuilder();
            StringBuilder selectedNodesInner = new StringBuilder();
            foreach(XmlNode node in nodes)
            {
                selectedNodesOuter.Append(node.OuterXml);
                selectedNodesInner.Append(node.InnerXml);
            }
            Console.WriteLine("######### OUTER XML #########");
            Console.WriteLine("");
            Console.WriteLine(selectedNodesOuter);
            Console.WriteLine("");
            Console.WriteLine("######### INNER XML #########");
            Console.WriteLine("");
            Console.WriteLine(selectedNodesInner);
        }

答案 1 :(得分:0)

Nathan你可以在线使用千种XPath测试仪中的一种:http://www.futurelab.ch/xmlkurs/xpath.en.html这可以让你在更改xpath查询时快速检查你得到的信息,比在这里等待答案更快:)

答案 2 :(得分:0)

出了什么问题:

trArray=document.getElementById('teste').getElementsByTagName('tr');

将为您提供所有TR的数组(假设TR内没有表格)

如果您想在其中找到标签,那么您可以执行类似

的操作
tagArray=trArray[0.getElementsByTagName('img');