如何检查列表中每个节点的值

发布于 2024-12-04 23:59:53 字数 1357 浏览 0 评论 0原文

可能的重复:
检查每个节点包含另一个列表并且可以更深入的列表

我有节点列表,同样,每个节点都可以是节点列表,并且可以继续更深。 现在我想检查某个字符串(如 html 标签)(没有任何子列表)的所有节点

我想要这个的伪代码。这不是 C# 列表或 IEnumerater,但我使用 HtmlAgilityPack 遍历网页中的所有 htmlnodes检查特定的 html 标签。

不要将此问题标记为关闭...如果需要更多信息,请添加评论。但我试图编写通用代码...我没有任何 id 可供搜索。

public string GetText(HtmlNode htmlNodeTemp)
    {
       foreach (HtmlNode hn in htmlNodeTemp.ChildNodes)
        {
            if (hn.ChildNodes.Count > 1)
            {
                GetText(hn);
            }
            if (hn.SelectSingleNode("//p").OuterHtml.Contains("<p>"))
            {
                if (finalText != null)
                {
                    if (finalText.Length < hn.SelectSingleNode("//p").InnerText.Length)
                    {
                        finalText = hn.SelectSingleNode("//p").InnerText;
                    }
                }
                else
                {
                    finalText = hn.SelectSingleNode("//p").InnerText;
                }
            }
        }
       return finalText;
    }

Possible Duplicate:
Check each node in the list which contains another list and can go deeper

I have List of nodes, again each node can be a list of nodes and it can continue to be more deeper. Now I want to check all the nodes for a certain string (like a html tag) (which do not have any child list).

I want the pseudo code for this. This is not a C# List or IEnumerater, But i am using HtmlAgilityPack to traverse all the htmlnodes in the webpage to check for particular html tag.

Don't tag this question as close...Please add a comment if need more information. But I trying to write generic code...I dont have any id's to search with.

public string GetText(HtmlNode htmlNodeTemp)
    {
       foreach (HtmlNode hn in htmlNodeTemp.ChildNodes)
        {
            if (hn.ChildNodes.Count > 1)
            {
                GetText(hn);
            }
            if (hn.SelectSingleNode("//p").OuterHtml.Contains("<p>"))
            {
                if (finalText != null)
                {
                    if (finalText.Length < hn.SelectSingleNode("//p").InnerText.Length)
                    {
                        finalText = hn.SelectSingleNode("//p").InnerText;
                    }
                }
                else
                {
                    finalText = hn.SelectSingleNode("//p").InnerText;
                }
            }
        }
       return finalText;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛滥成性 2024-12-11 23:59:53

您将需要使用递归解决方案并检查元素是否存在。所以像这样的伪代码:

 Function FindTheNode (CurrentNode)

      Is the current node null?
            Yes -> Return null;

      Is the current node == Search String
            Yes -> return node;

      For each node X in the nodes of current node:
           var node = FindTheNode(X);

           is node non null?
              Yes -> return node

      Return null

  End

You're going to want to use a recursive solution and check for the existance of the element. So something like this pseudo code:

 Function FindTheNode (CurrentNode)

      Is the current node null?
            Yes -> Return null;

      Is the current node == Search String
            Yes -> return node;

      For each node X in the nodes of current node:
           var node = FindTheNode(X);

           is node non null?
              Yes -> return node

      Return null

  End
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文