2012-03-27 142 views
0

我有一个包含字符的XML文档“&;”,像这样:如何使用Python解析XML文档包含字符“&”

<dblp> 
<article mdate="2011-12-29" key="tr/trier/MI96-15" publtype="informal publication"> 
<author>Manfred Laumen</author> 
<title>Newton's Method for a Class of Optimal Shape Design Problems</title> 
<journal>Universit&auml;t Trier, Mathematik/Informatik, Forschungsbericht</journal> 
<volume>96-15</volume> 
<year>1996</year> 
</article> 
</dblp> 

我如何解析呢?

我的代码永远是错的:

import libxml2 
doc = libxml2.parseFile('dblp.xml') 

回答

3

您需要定义一个&auml; XML DTD,它需要在XML被解析到引用(或包含)。 This looks like the one you need。只需在<?xml ...>声明后面立即添加适当的声明,如<!DOCTYPE dblp SYSTEM "http://dblp.uni-trier.de/xml/dblp.dtd">到XML文件的顶部。

如果这已经不在您的文件中,那么让您的脚本添加它已经很简单了。

您也可以嵌入文档中这样整个DTD:

<?xml version='1.0' encoding='utf8'?> 
<!DOCTYPE dblp [ 
    <!-- the DTD linked above goes here --> 
]> 
<!-- the rest of your XML goes here --> 

顺便说一句,这真的没有什么与Python;您在任何语言中使用的任何XML解析器都会窒息未定义在任何位置的实体。

+0

奇怪的是,包括XML源代码中的DTD工作得很完美,但是链接到DTD并没有:实体被解析器无声地吞下。特别是基本的dblp XML文件会发生什么情况:它已经包含一个指向dtd的链接,但是在解析器生成实体的输出中,它们被省略了。 – 2013-10-31 00:54:19