Megaparsec技术需求:遇指定元素前找目标元素,未找到则报错
使用Megaparsec解析FreePlane XML的核心问题
我正在尝试用Megaparsec解析FreePlane(思维导图工具)导出的XML,这是第三次尝试深入掌握这个库——之前写过几个解析器,两个成功(折腾了很久),一个中途放弃转手动解析,显然我没搞懂一些核心概念,希望得到指导。
核心需求
- 在遇到第二个元素之前找到第一个目标元素
- 若在遇到第二个元素前未找到第一个元素则触发错误
- 解析过程不越过第二个元素
具体场景
XML片段中存在多个被<>包裹的属性块,LINK是可选属性。由于属性块包含大量属性,我无法逐一解析,希望跳过无关内容仅提取LINK属性。当第一个属性块含LINK时,简单的manyTill解析能正常返回链接;但如果第一个属性块无LINK,现有解析会错误地返回后续块的LINK,而我需要此时触发错误(以便后续使用<|>组合子)。
我目前通过提取<>间文本再用列表函数处理的方式实现,但代码十分繁琐,同时有两个疑问:
- 是否存在现成的解析器能实现「遇指定元素前找目标元素,未找到则报错」?
- Megaparsec是否仅擅长语法明确的逐字符解析,处理任意跳过场景是否存在困难?
内容的提问来源于stack exchange,提问作者TomP
相关产品推荐
相关产品推荐

