我正在尝试使用Python的xml.etree.ElementTree.parse()函数来解析我通过从WordPress博客导出所有内容而创建的XML文件。但是,当我这样做的时候:
import xml.etree.ElementTree as xml
tree = xml.parse('/path/to/file.xml')
我收到以下错误:
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1183, in parse
tree.parse(source, parser)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 656, in parse
parser.feed(data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1643, in feed
self._raiseerror(v)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1507, in _raiseerror
raise err
ParseError: unbound prefix: line 189, column 1
以下是我的XML文件第189行的内容:
<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blogname.wordpress.com/osd.xml" title="blog name" />
我已经看到很多关于Android开发出现此错误的问题,但我无法判断是否以及如何适用于我的情况。任何人都可以帮忙吗?
答案 0 :(得分:7)
向所有人道歉,这显然是愚蠢的,但事实证明我在文档中根本没有“atom”的命名空间定义。我猜“未绑定的前缀”意味着前缀“atom”没有“绑定”到命名空间定义?
无论如何,添加所述定义已经解决了这个问题。虽然它让我想知道为什么WordPress导出XML文件而没有对他们使用的所有命名空间的正确定义......
答案 1 :(得分:1)
如果删除所有名称空间,则工作正常。
更改
<s:home>USA</s:home>
到
<home>USA</home>
答案 2 :(得分:0)
为了有一天能对某人有所帮助,我也在使用Python中的WordPress XML导出(WordPress扩展RSS)文件,并遇到了相同的错误。就我而言,WordPress包含了 most 个正确的名称空间定义。但是,XML也具有iTunes播客信息,并且iTunes名称空间声明不存在。
我通过在RSS声明块中添加<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
来修复它。所以这个:
$('form').submit(function(){
$(this).find('input').each(function(){
$(this).val($.trim($(this).val()));
});
});
成为这个:
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"