如何在 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">&#160;</td>
        </tr>
        <tr>
            <td>&#160;<span>&#160;<input type="text" id="txtCaptcha" readonly="readonly" />&#160;
    <input type="button" onclick="RenderCaptcha()" value="Refresh" /><br />&#160;
    <input type="text" style="width: 140px;" id="txtverification" /></span> &#160;
            </td>
        </tr>
        <tr>
            <td colspan="1">
                <p id="radETempNode">&#160;
                    <input type="submit" class="brochur" value="Submit" id="ComplaintFormSubmit" /> &#160;
                    <input type="button" class="brochur" value="Reset" id="ComplaintFormReset" /> &#160;
                </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 为 ComplaintFormResetComplaintFormSubmittxtverification 的输入> 具有 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 的输入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Simple HTML Dom Parser 从 HTML 中删除类和 ID 属性

[转载]基于TFS实践敏捷-实现用户场景

html JS中如何获取某ID下的某个标签的某个属性值?

HTML 敏捷包 - 删除不需要的标签而不删除内容?

如何从包中删除过程或函数

基于JIRA的Scrum敏捷开发的项目管理