我希望能够解析不一定格式良好的XML.例如,我正在寻找一种模糊而非严格的解析器,能够从严重嵌套的标签中恢复.我可以写自己的,但首先要问这里.
更新:
我想要做的是从HTML中提取链接和其他信息.在格式良好的XML的情况下,我可以使用Scala XML API.在格式不正确的XML的情况下,以某种方式将其转换为正确的XML(以某种方式)并以相同的方式处理它会很好,否则我必须有两个完全不同的函数集来处理文档.
显然因为输入结构不正确并且我正在尝试创建一个结构良好的树,所以必须要有一些启发式(例如,当你看到<parent><child></parent>你会关闭第<child>一个,当你看到<child>你忽略它时) ).但当然这不是一个正确的语法,因此没有正确的方法.
您正在寻找的不是XML解析器.XML对嵌套,关闭等非常严格.其他一个答案建议使用Tag Soup.这是一个很好的建议,虽然从技术上来说它比词法分析器更接近词法分析器.如果你想从XML-ish内容中得到的只是一个没有任何验证的事件流,那么推出自己的解决方案几乎是微不足道的.只需遍历输入,消耗与正常表达式匹配的内容(这正是Tag Soup所做的).
问题是词法分析器无法为您提供解析器所需的许多功能(例如,生成基于树的输入表示).您必须自己实现该逻辑,因为这样的"宽松"解析器无法确定如何处理如下情况:
<parent>
<child>
</parent>
</child>
Run Code Online (Sandbox Code Playgroud)
想一想:什么样的树会期望摆脱这种?这个问题确实没有合理的答案,这正是解析器无法提供帮助的原因.
现在,这并不是说您不能使用Tag Soup(或您自己的手写词法分析器)根据此输入生成某种树结构,但实现将非常脆弱.使用像XML这样的面向树的格式,你真的别无选择,只能严格,否则几乎不可能得到一个合理的结果(这是浏览器兼容性这么难的部分原因).
| 归档时间: |
|
| 查看次数: |
2287 次 |
| 最近记录: |