【问题标题】:Change Tag InnerText with HTML AGILITY PACK使用 HTML AGILITY PACK 更改标记 InnerText
【发布时间】:2012-03-07 21:11:09
【问题描述】:

我正在使用 HTML Agility Pack,并且我正在尝试替换一些这样的标签的 InnerText

protected void GerarHtml()
{
    List<string> labels = new List<string>();

    string patch = @"C:\EmailsMKT\" + 
                              Convert.ToString(Session["ssnFileName"]) + ".html";

     DocHtml.Load(patch);

     //var titulos = DocHtml.DocumentNode.SelectNodes("//*[@class='lblmkt']");

     foreach (HtmlNode titulo in
              DocHtml.DocumentNode.SelectNodes("//*[@class='lblmkt']"))
     {
          titulo.InnerText.Replace("test", lbltitulo1.Text);
     }

     DocHtml.Save(patch);

}

html:

<.div><.label id="titulo1" class="lblmkt">teste</label.><./Div>

【问题讨论】:

    标签: c# html html-agility-pack


    【解决方案1】:

    字符串是不可变的(您应该能够找到很多关于此的文档)。
    String 类的方法不会改变实例,而是创建一个新的、修改后的字符串。

    因此,您致电:

    titulo.InnerText.Replace("test", lbltitulo1.Text);
    

    不改变 InnerText,但返回您希望 InnerText 成为的字符串。

    另外,InnerText 是只读的;您必须使用 Set InnerText with HtmlAgilityPack 中所示的 Text

    改用下面这行代码(再次将字符串操作的结果赋给属性):

    titulo.Text = titulo.Text.Replace("test", lbltitulo1.Text);
    

    【讨论】:

    • 我试过了,但我收到了 HtmlAgilityPack.InnerText 它只是就绪
    【解决方案2】:

    我能够得到这样的结果:

    HtmlTextNode Hnode = null;
    Hnode = DocHtml.DocumentNode.SelectSingleNode("//label[@id='titulo1']//text()") as HtmlTextNode;
    Hnode.Text = lbltitulo1.Text;
    

    【讨论】:

    • :'无法将'HtmlAgilityPack.HtmlNode'类型的对象转换为'HtmlAgilityPack.HtmlTextNode'类型。'
    猜你喜欢
    • 2012-02-24
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2011-01-22
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多