html-agility-pack避免解析TextArea

时间:2018-04-24 07:02:25

标签: html-agility-pack

Html-agility-pack似乎是从TextArea中的元素构建节点,它们不是真正的节点。 例如:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
<title>Sample</title>
</head>
<body>
<TEXTAREA>Text in the <div>hello</div>area</TEXTAREA>
</body>
</html>

这将在“textarea”下产生一个“div”的子节点。 浏览器会将所有内容视为文本。

有没有办法强制html-agility-pack以相同的方式运行?

澄清

我不希望首先创建节点。如果我运行doc.DocumentNode.SelectNodes("//div")我希望这不会产生任何结果。现在我必须使用doc.DocumentNode.SelectNodes("//div [not(ancestor::textarea]")但我必须为我执行的每个选择执行此操作以避免幻像节点。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用InnerText属性只获取节点的文本。这也会获取任何子节点的文本(在本例中为div)。

var textArea = doc.DocumentNode.SelectSingleNode("//textarea");

string text = textArea.InnerText;

答案 1 :(得分:0)

问题已由zzzprojects的善良人员修复。

修复版本1.8.2上的可用和测试。

您可以在此处查看门票:Issue 183