我有这段代码
<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...
答案 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');