html解析xml字符串,您能否举例说明为什么用正则表达式解析XML和HTML很困难?

其实

<img>

是无效的HTML,也不是有效的XML。

它不是有效的XML,因为'&lt;' 和'&gt;' 属性字符串中的有效字符不是。 它们需要使用相应的XML实体进行转义&amp; lt; 和&amp; gt;

它不是有效的HTML,因为HTML中不允许使用简短的结束表单(但在XML和XHTML中是正确的)。 根据HTML 4.01规范,'img'标记也是隐式封闭标记。 这意味着手动关闭它实际上是错误的,相当于两次关闭任何其他标签。

HTML中的正确版本是

<img>

XHTML和XML中的正确版本是

<img>

您提供的以下示例也无效

<

tag

attr="5"

/>

这也不是有效的HTML或XML。 标签的名称必须在'&lt;'后面,尽管属性和结束'&gt;' 可能在他们想要的任何地方。 所以有效的XML实际上就是这样

attr="5"

/>

这是另一个更有趣的一个:你实际上可以选择使用“或”作为你的属性引用字符

This is single quoted AND valid!

发布的所有其他原因都是正确的,但解析HTML的最大问题是人们通常无法正确理解所有语法规则。 您的浏览器将您的tagsoup解释为HTML这一事实并不意味着您实际上已经编写了有效的HTML。

编辑:甚至stackoverflow.com也同意我关于有效和无效的定义。 您的无效XML / HTML未突出显示,而我的更正版本是。

基本上,XML不能用regexp解析。 但也没有理由这样做。 每种语言都有许多XML解析器。 您可以选择SAX解析器,DOM解析器和Pull解析器。 所有这些都保证比使用正则表达式解析要快得多,然后您可以在生成的DOM树上使用XPath或XSLT等酷技术。

因此,我的回答是:不仅难以用正则表达式解析XML,而且这也是一个坏主意。 只需使用数百万个现有XML解析器中的一个,并利用XML的所有高级功能。

HTML甚至难以自己解析。 首先,法律语法有许多你可能不知道的微妙之处,其次,野外的HTML只是一堆巨大的(你得到我的漂移)。 有很多松散的解析器库可以很好地处理像标签汤这样的HTML,只需使用它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值