【问题标题】:vb.net HtmlAgilityPack Insert string after divvb.net HtmlAgilityPack 在 div 之后插入字符串
【发布时间】:2014-08-15 21:43:17
【问题描述】:

我正在尝试在 div 结束后直接插入一些我自己的 html。这个 div 里面还有其他的 div。

    Dim HtmlNode As HtmlNode = HtmlNode.CreateNode("<span class=""label"">Those were the friends</span>")
    Dim FriendDiv = htmldoc.DocumentNode.SelectSingleNode("//div[@class='profile_friends']")
    Dim NewHTML As HtmlNode = htmldoc.DocumentNode.InsertAfter(HtmlNode, FriendDiv)

每次运行该代码时,我都会收到异常 Node "&lt;div class="profile_topfriends"&gt;&lt;/div&gt;" was not found in the collection

【问题讨论】:

    标签: html .net vb.net html-agility-pack


    【解决方案1】:

    类似于XmlNode's InsertAfter(),需要在被引用节点的公共父节点和被插入节点上调用该方法。试试这样的:

    Dim NewHTML As HtmlNode = FriendDiv.ParentNode.InsertAfter(HtmlNode, FriendDiv)
    

    对我来说工作得很好。这是我在 C# 中做的一个简单测试(翻译成 VB):

    Dim html = "<body><div></div></body>"
    Dim doc As New HtmlDocument()
    doc.LoadHtml(html)
    Dim div = doc.DocumentNode.SelectSingleNode("//div")
    Dim span = HtmlNode.CreateNode("<span class=""label"">Those were the friends</span>")
    Dim newHtml = div.ParentNode.InsertAfter(span, div)
    Console.WriteLine(XDocument.Parse(doc.DocumentNode.OuterHtml).ToString())
    

    &lt;span&gt; 出现在控制台中 &lt;div&gt; 之后。

    【讨论】:

    • FriendDiv 是由 HtmlDocument.DocumentNode.SelectSingleNode 创建的。我现在如何使用 NewHTML 更新 HtmlDocument?
    • 你是什么意思? InsertAfter() 应该将 NewHTML 插入到 HtmlDocument
    • &lt;span class=""label""&gt;Those were the friends&lt;/span&gt;在 htmldoc.text 中无处可见
    • 谢谢!我只需要假设它一切正常。目前我收到“''”字符,十六进制值 0x22,不能包含在名称中。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多