很奇怪! 当我加载&使用
将 替换为空字符串 var document = new HtmlDocument();
document.LoadHtml(data);
document.DocumentNode.OuterHtml.Replace("<tbody>", "");
这很好用&amp; <tbody>
将被删除。
当我尝试使用<br>
替换<br/>
document.DocumentNode.OuterHtml.Replace("<br>", "<br/>");
不起作用:(
也尝试了,
var brTags = document.DocumentNode.SelectNodes("//br");
if (brTags != null)
{
foreach (HtmlNode brTag in brTags)
{
brTag.OuterHtml = "<br/>";
// brTag.Name= "br/"; - > Also this one :(
}
}
HTMLAgilityPack的replace()函数不适用于自闭标记吗?
答案 0 :(得分:10)
document.OptionWriteEmptyNodes = true;
为你做诀窍!
答案 1 :(得分:5)
您不必手动将<br>
替换为<br/>
,如果您需要关闭节点,只需指示库执行此操作,例如:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.Save(Console.Out);
将输出:
<br>
和这个
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.OptionWriteEmptyNodes = true;
doc.Save(Console.Out);
将输出:
<br />
答案 2 :(得分:2)
StringWriter writer = new StringWriter();
var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings() { OmitXmlDeclaration = true });
document.OptionOutputAsXml = true;
document.Save(xmlWriter);
var newHtml = writer.ToString();
答案 3 :(得分:1)
实际上,如果您没有将替换结果分配回文档,那么您的第一个查询也不会起作用。字符串在C#中是不可变的。当您Replace
创建并返回新字符串时。原始字符串保持不变。
OuterHtml
也是只读的。你无法分配它。
要删除节点,您应该选择它们,删除每个节点,并将结果保存到原始字符串。
var document = new HtmlDocument();
document.LoadHtml(data);
foreach (var tbody in document.DocumentNode.SelectNodes("//tbody"))
tbody.Remove();
data = document.DocumentNode.OuterHtml;
更新:
foreach (var br in document.DocumentNode.SelectNodes("//br"))
br.RemoveAllChildren();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Closed | HtmlElementFlag.Empty;
document.OptionWriteEmptyNodes = true;
data = document.DocumentNode.OuterHtml;