我有以下XML文件结构:
<doc id="4611827073121129112">
<class name="tag:September_11" val="-0.079590" />
<class name="tag:Theater" val="-0.134223" />
<class name="tag:Adaptation" val="-0.106678" />
<class name="tag:Paranormal" val="-0.183504" />
<class name="tag:Magic" val="-0.179214" />
<class name="tag:Comedy_Drama" val="-0.044658" />
<class name="tag:Fashion" val="-0.280695" />
<class name="tag:Running" val="0.160316" />
<class name="tag:Construction" val="-0.072044" />
<class name="tag:Suspense_Thriller" val="-0.370302" />
<class name="tag:Space" val="-0.239723" />
<class name="tag:Police" val="-0.139019" />
<class name="tag:Hip-Hop_&_Rap_Music" val="-0.290353" />
<class name="tag:Surfing" val="-0.027105" />
<class name="tag:Halloween" val="-0.236606" />
<class name="tag:Mystery_&_Suspense" val="0.005384" />
<class name="tag:Educational" val="-0.166370" />
<class name="tag:Biography" val="-0.126149" />
<class name="tag:Religion" val="-0.034275" />
<class name="tag:Cartoon" val="-0.487169" />
<class name="tag:Auto_Racing" val="-0.047648" />
<class name="tag:Pets" val="-0.118809" />
</doc>
文件没有xml扩展名,例如文件名为test.values
先尝试一下我决定使用python shell:我使用的是Anaconda版本的python:
Python 2.7.9 |Anaconda 2.1.0 (x86_64)| (default, Dec 15 2014, 10:37:34)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse('test.values')
我收到以下错误:
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 14, column 43
仔细看看这一行:
<class name="tag:Hip-Hop_&_Rap_Music" val="-0.290353" />
我意识到它有&
我想到的是xml.etree包没有以utf模式打开文件:
我手动删除&
,一切正常。但问题是我必须阅读大量文件并进行解析。根据我的谷歌搜索,我无法找到任何以etree
模式显示utf-8
包裹打开文件的示例。我该如何解决这个问题?
答案 0 :(得分:1)
你是对的,而不是它与Unicode有关(尽管在你解决这个问题后可能会出现Unicode问题。
除非您将其转义(分别为&amp; amp;或&amp; lt;分别),否则您不能使用&符号或小于XML中的属性值。因此无论编写什么程序,都应修复XML以检测并重新编码这些字符。