【问题标题】:Replacing tags in HtmlAgility替换 HtmlAgility 中的标签
【发布时间】:2011-05-09 11:16:26
【问题描述】:

我正在尝试用 h2 标签替换我所有的 h1 标签,并且我正在使用 HtmlAgility 包。

我这样做了:

var headers = doc.DocumentNode.SelectNodes("//h1");
if (headers != null)
{
    foreach (HtmlNode item in headers)
    {
        //item.Replace??
    }
}

我被困在那里。我试过这个:

var headers = doc.DocumentNode.SelectNodes("//h1");
if (headers != null)
{
    foreach (HtmlNode item in headers)
    {
        HtmlNode newNode = new HtmlNode(HtmlNodeType.Element, doc, item.StreamPosition);
        newNode.InnerHtml = item.InnerHtml;
        // newNode suppose to set to h2
        item.ParentNode.ReplaceChild(newNode, item);
    }
}

问题是我不知道如何创建一个新的 h2,获取所有属性等。 我确定有一种简单的方法可以做到这一点,有什么想法吗?

【问题讨论】:

    标签: html-agility-pack


    【解决方案1】:
    var headers = doc.DocumentNode.SelectNodes("//h1");
            if (headers != null)
            {
                foreach (HtmlNode item in headers)
                {
                    item.Name = "h2"
                }
            }
    

    【讨论】:

    • 继续我的冒险探索 HtmlAgilityPack.. 有没有办法强制所有属性用双引号括起来?我找到了“OptionOutputOptimizeAttributeValues”,但这只是删除了所有引号..
    • 我不知道。尝试在 HtmlAgilityPack 官方论坛中提问。 htmlagilitypack.codeplex.com/discussions
    • 我也在尝试更改标题,并使用这个确切的代码。我可以将名称更改为“h2”,但“OuterHtml”仍然是 h1?
    【解决方案2】:

    使用 Descendants 而不是 SelectNodes 替换标签的类似方法:

    IEnumerable<HtmlNode> tagDescendants = doc.DocumentNode.Descendants("h1");
    foreach (HtmlNode htmlNode in tagDescendants)
    {
        htmlNode.Name = "h2";
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多