微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用HXT unpickler忽略XML属性

我正在编写一个小应用程序,旨在从多个站点提取 XML,然后以我想要的方式处理数据.我之前用不同的语言制作了这样的应用程序,我正在为Haskell实践编写这个应用程序.

无论如何,到了这一点.在百万和一个不同的XML解析器环顾网络后,我决定选择HXT,因为谁不喜欢箭头.在页面http://www.haskell.org/haskellwiki/HXT/Conversion_of_Haskell_data_from/to_XML之后,我得到了一些似乎读取我的XML文件并将其放入我定义的Haskell数据类型的东西.我正在使用XmlPickler的实例来读取文件中的数据来实现这一目标.除了这个错误,我到达了可以工作的东西:

Fatal error: document unpickling Failed
xpcheckEmptyAttributes: unprocessed XML attribute(s) detected

我知道我没有处理所有属性.我不想要所有的属性.有没有办法忽略这些?我想我可以处理所有属性,将它们放在一个新的数据类型中,然后从中提取属性获取我真正想要的数据.我想避免这个小小的黑客,因此我在这里,要求正确的方式™.

我使用错误的工具来完成工作吗?解开第三方数据是不安全的(就像在Python中一样)?

我环顾网络寻找解决方案,但Text.XML.HXT.Arrow.XmlState.SystemConfig似乎没有我需要禁用此行为.

解决方法

前几天我遇到了这个确切的问题,并得出以下结论:

Am I using the wrong tool for the job?

是. HXT的pickle功能旨在轻松地序列化和反序列化数据,但没有太大的灵活性.从链接页面

They are intended to read machine generated XML,ideally generated by the same pickler.

至于:

Is unpickling 3rd party data unsafe (like it is in Python)?

没有HXT,没有. python中的pickling是不安全的,因为它(松散地)等同于在任意内容调用eval(). HXT只是一个XML解析器,没有调用任意代码.

就个人而言,我已经开始使用xml包(Text.XML.Light)手动处理XML,而不是试图让HXT的pickler做我想做的事情.它并不简洁,但它让我忽略了我不关心的数据.你可能也可以使用HXT的非泡菜部分,如果你喜欢箭头(我还在我的脑袋周围;)).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。