如何在 Html 敏捷包中删除基于 id 和 value 的输入
Posted
技术标签:
【中文标题】如何在 Html 敏捷包中删除基于 id 和 value 的输入【英文标题】:How to delete an input based on id and value in Html agility pack 【发布时间】:2015-01-25 23:20:16 【问题描述】:下面给出的是敏捷包解析的html
<table>
<tbody>
<tr>
<td colspan="1">
<p>Name*</p>
<p>
<input type="text" size="24" title="Name" id="Name" name="Name" />
</p>
</td>
</tr>
<tr>
<td colspan="1">
<p>Age*</p>
<p>
<input type="text" size="24" title="Age" id="Age" name="Age" />
</p>
</td>
</tr>
<tr>
<td colspan="1">
<p>Date*</p>
<p>
<input type="text" size="24" title="Date" id="Date" name="Date" />
</p>
</td>
</tr>
<tr>
<td colspan="1"> </td>
</tr>
<tr>
<td> <span> <input type="text" id="txtCaptcha" readonly="readonly" /> 
<input type="button" onclick="RenderCaptcha()" value="Refresh" /><br /> 
<input type="text" style="width: 140px;" id="txtverification" /></span>  
</td>
</tr>
<tr>
<td colspan="1">
<p id="radETempNode"> 
<input type="submit" class="brochur" value="Submit" id="ComplaintFormSubmit" />  
<input type="button" class="brochur" value="Reset" id="ComplaintFormReset" />  
</p>
</td>
</tr>
</tbody>
</table>
我想删除 ID 为 ComplaintFormReset,ComplaintFormSubmit,txtverification 的输入和值为 Refresh 的输入。
有什么办法吗?
下面是我尝试过的代码
var document = new HtmlDocument();
document.LoadHtml(Html);
var nodes = new Queue<HtmlNode>(document.DocumentNode.Descendants());
while (nodes.Count > 0)
var node = nodes.Dequeue();
//if (node.Name != "strong" && node.Name != "em" && node.Name != "u" && node.Name != "#text")
if(node.Id!="")
var parentNode = node.ParentNode;
if (node.Attributes["id"] != null && (string.Compare(node.Attributes["id"].Value, "txtverification", StringComparison.InvariantCulture) == 0 || string.Compare(node.Attributes["id"].Value, "ComplaintFormSubmit", StringComparison.InvariantCulture) == 0 || string.Compare(node.Attributes["id"].Value, "ComplaintFormReset", StringComparison.InvariantCulture) == 0))
if (null != node.ParentNode)
parentNode.RemoveChild(node, true);
//nodes.Enqueue(node);
//node.RemoveAll();
string dd =document.DocumentNode.InnerHtml;// this final htm still contains the node i had tried to remove
我有什么问题吗?
【问题讨论】:
【参考方案1】:你没有问题!
您的代码似乎适用于 ID 为 ComplaintFormReset、ComplaintFormSubmit 和 txtverification 但 不 的输入> 具有 Refresh 值的那个。
有两个原因
-
您需要删除
if(node.Id!="")
检查,因为值为 Refresh 的输入没有 Id 属性
您需要为“值”属性等于“刷新”的节点添加检查
此代码将起作用
var document = new HtmlDocument();
document.LoadHtml(Html);
var nodes = new Queue<HtmlNode>(document.DocumentNode.Descendants());
while (nodes.Count > 0)
var node = nodes.Dequeue();
var parentNode = node.ParentNode;
if (node.Attributes["id"] != null &&
(string.Compare(node.Attributes["id"].Value, "txtverification", StringComparison.InvariantCulture) == 0 ||
string.Compare(node.Attributes["id"].Value, "ComplaintFormSubmit", StringComparison.InvariantCulture) == 0 ||
string.Compare(node.Attributes["id"].Value, "ComplaintFormReset", StringComparison.InvariantCulture) == 0)
||
node.Attributes["value"] != null &&
string.Compare(node.Attributes["value"].Value, "Refresh",
StringComparison.InvariantCulture) == 0)
if (null != node.ParentNode)
parentNode.RemoveChild(node, true);
string dd = document.DocumentNode.InnerHtml;
【讨论】:
以上是关于如何在 Html 敏捷包中删除基于 id 和 value 的输入的主要内容,如果未能解决你的问题,请参考以下文章