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]")
但我必须为我执行的每个选择执行此操作以避免幻像节点。
有什么想法吗?
答案 0 :(得分:0)
使用InnerText
属性只获取节点的文本。这也会获取任何子节点的文本(在本例中为div
)。
var textArea = doc.DocumentNode.SelectSingleNode("//textarea");
string text = textArea.InnerText;
答案 1 :(得分:0)