如何确定HTML块是否不包含任何文本节点

时间:2009-11-25 07:32:17

标签: .net html xhtml

你如何找出一个HTML块是否包含零文本节点?

e.g。这样:

<p><div><span></span></div></p>

包含零文本节点,而这个:

<p>Stuff</p><div><span>other stuff</span></div>

包含两个。

此外,您可以保证HTML符合XHTML标准且内容大小可能不到4k。我正在使用.net,所以如果提出某种服务器端建议,请在C#中进行。我想我可以将这个东西加载到XmlDocument中并遍历DOM树寻找非空的XmlText节点,但这是最后的手段,因为速度是最重要的。

4 个答案:

答案 0 :(得分:1)

我会完全按照你的建议 - 寻找非空的XMLText节点。请记住,XML没有一致的词法形式(例如引用,空格,CDATA都会导致问题)。在你尝试之前,你知道使用DOM会受到性能影响吗?

更新您不必使用XmlDocument(或XDocument)。有许多工具可以解决这个问题。我会看看像StAX http://en.wikipedia.org/wiki/StAX这样的东西 - 流式XML解析器 - 你可以在一个非空的文本节点上找到它。 XML社区在优化性能方面投入了大量精力。您可能会发现Saxon(http://saxon.sourceforge.net/)或libxml2(http://xmlsoft.org/)具有您所需要的功能。 “用libxml2编程就像是一个充满异国情调的陌生人的激动人心的拥抱。” Mark Pilgrim。

在任何情况下,如果你在XML-DEV上提出你的问题(http://www.xml.org/xml-dev/ - 随意提一下我建议它),那么如果你没有得到明确和有用的建议,我会感到失望。

答案 1 :(得分:1)

给定一定的HTML块,您可以随时删除<>内的所有内容以及空白的所有内容,并查看剩余的字符串是否为空。这种方法适用于任何处理正则表达式的语言,但这是javascript中的一个例子:

var isEmpty = someNode.innerHTML.replace(/<[^>]+>/g, "").replace(/\s/g, "") == ""

答案 2 :(得分:0)

如果我没弄错的话,你应该能够使用innerText属性(在Internet Explorer中,在其他浏览器中有一个等价物,我记不起名字了),只是将它与空字符串进行比较。 / p>

第二个想法,这个属性可能会删除空白,但值得一试。

答案 3 :(得分:0)

这就是为什么不使用正则表达式。

以下HTML传递HTML 4.01验证。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<title>demo</title>
<div><p class=">" ></div>

如果someNode是div,则d正则表达式将失败。如果正则表达式无法处理简单有效的HTML,那么它与无效标记的可能性有多大?