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

在python中解析xbrl文件

我正在研究xml解析器.
目标是解析多个不同的xml文件,这些文件中的前缀和标记保持一致,但名称空间却发生了变化.

因此,我正在尝试:

>仅通过< prefix:tags>来解析xml.而不用名称空间解析(替换)前缀.每个文档的前缀保持不变.
>自动加载名称空间,以便可以将标识符(< prefix:tag>)替换为适当的名称空间.
>只需按标记解析xml

我已经尝试过xml.etree.ElementTree.

我也看了lxml
我找不到在lxml中的XMLParser的任何配置选项可以对我有所帮助,尽管here我可以阅读一个答案,其中作者建议lxml应该能够为我自动收集名称空间.

有趣的是,parsed_file = etree.XML(file)失败并显示以下错误

lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1

我要解析的文件一个示例是here

解决方法:

不在乎ns前缀,在乎完整的名称空间

有时候,人们确实在乎那些短前缀和遗忘,它们是次要的.它们只是对完全限定名称间的简短引用.例如.

xmlns:trw="http://www.trw.com/20131231"

从xml开始,从现在开始,“ trw:”代表完全限定的命名空间“ http://www.trw.com/20131231”.请注意,可以将此前缀重新定义为以下任何元素中的任何其他命名空间,并且可能会获得完全不同的含义.

另一方面,当您关心真实含义时,这意味着完全限定的名称空间,您可能会认为“ trw:row”为“ {http://www.trw.com/20131231}row”.这种翻译的含义将是可靠的,并且不会随着前缀的更改而改变.

解析引用的xml

指向http://edgar.sec.gov/Archives/edgar/data/1267097/000104746914000925/trw-20131231.xml链接指向一个xml,该xml通过xmlstarlet进行验证并且可以解析哪个lxml.

显示错误消息是指流的第一个字符,因此很可能您遇到文件中的BOM字节,或者尝试读取xml(已压缩并应首先解压缩).

lxml和名称空间

lxml可以很好地与名称空间配合使用.它允许您使用使用命名空间的XPath表达式.通过控制输出的namspace前缀,它有点复杂,因为它依赖于xmlns属性,而xmlns属性是序列化文档的一部分.如果要修改前缀,则必须以某种方式组织这些xmlns属性,通常是将所有都移动到根元素.同时,lxml会跟踪每个元素的完全限定名称空间,因此在序列化时,它将尊重该全名以及该名称间的当前有效前缀.

处理这些xmlna属性需要更多代码,请参阅lxml文档.

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