我在使用HTML Agility Pack时遇到了一些麻烦.
当我在不包含特定节点的HTML上使用此方法时,我得到一个空引用异常.它起初工作,但后来停止工作.这只是一个片段,还有大约10个foreach循环选择不同的节点.
我究竟做错了什么?
public string Export(string html)
{
var doc = new HtmlDocument();
doc.LoadHtml(html);
// exception gets thrown on below line
foreach (var repeater in doc.DocumentNode.SelectNodes("//table[@class='mceRepeater']"))
{
if (repeater != null)
{
repeater.Name = "editor:repeater";
repeater.Attributes.RemoveAll();
}
}
var sw = new StringWriter();
doc.Save(sw);
sw.Flush();
return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用c#编辑所有特殊html标记的属性(如a).例如,我想更改此代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
</head>
<body>
<a href="http://google.com"></a>
<a href="http://gmail.com"></a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
对此:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
</head>
<body>
<a href="http://go.go/default.aspx?url=http://google.com">
</a><a href="http://go.go/default.aspx?url=http://gmail.com"></a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这意味着我想追加hrefin 的值<a>
我尝试过LinqToXML,但它不起作用,因为HTML不是有效的XML(因为DOCTYPE标记)
这是我的代码:
XDocument xmlFile = XDocument.Load(s);
var query = from c in xmlFile.Elements("html").Elements("body").Elements("a")
select c;
foreach (XElement book in query)
{
string atr = book.Attribute("href").Value;
book.Attribute("href").Value = "http://ahmadalli.somee.com/default.aspx?url=" + atr;
} …Run Code Online (Sandbox Code Playgroud)