其实" />
是无效的HTML,也不是有效的XML。
它不是有效的XML,因为''在属性字符串中不是有效字符。它们需要使用相应的XML实体进行转义< 和>
它不是有效的HTML,因为HTML中不允许使用简短的结束表单(但在XML和XHTML中是正确的)。根据HTML 4.01规范,'img'标记也是隐式封闭标记。这意味着手动关闭它实际上是错误的,相当于两次关闭任何其他标签。
HTML中的正确版本是
XHTML和XML中的正确版本是
您提供的以下示例也无效<
tag
attr="5"
/>
这也不是有效的HTML或XML。标签的名称必须位于“”可能位于他们想要的任何位置。所以有效的XML实际上就是这样
这是另一个更有趣的一个:你实际上可以选择使用“或”作为你的属性引用字符
发布的所有其他原因都是正确的,但解析HTML的最大问题是人们通常无法正确理解所有语法规则。您的浏览器将您的tagsoup解释为HTML这一事实并不意味着您实际上已经编写了有效的HTML。
编辑:甚至stackoverflow.com也同意我关于有效和无效的定义。您的无效XML / HTML未突出显示,而我的更正版本是。
基本上,XML不能用regexp解析。但也没有理由这样做。每种语言都有许多XML解析器。您可以选择SAX解析器,DOM解析器和Pull解析器。所有这些都保证比使用正则表达式解析要快得多,然后您可以在生成的DOM树上使用XPath或XSLT等酷技术。
因此,我的回答是:不仅难以用正则表达式解析XML,而且这也是一个坏主意。只需使用数百万个现有XML解析器中的一个,并利用XML的所有高级功能。
HTML甚至难以自己解析。首先,法律语法有许多你可能不知道的微妙之处,其次,野外的HTML只是一堆巨大的(你得到我的漂移)。有很多松散的解析器库可以很好地处理像标签汤这样的HTML,只需使用它们。