2010-03-26 70 views
9

下面的代碼,我有:實體引用和LXML

from cStringIO import StringIO 
from lxml import etree 

xml = StringIO('''<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE root [ 
<!ENTITY test "This is a test"> 
]> 
<root> 
    <sub>&test;</sub> 
</root>''') 

d1 = etree.parse(xml) 
print '%r' % d1.find('/sub').text 

parser = etree.XMLParser(resolve_entities=False) 
d2 = etree.parse(xml, parser=parser) 
print '%r' % d2.find('/sub').text 

下面是輸出:

'This is a test' 
None 

我如何獲得LXML給我'&test;',即原始實體引用?

回答

19

的「未解決」實體保留下來用作元素節點sub

>>> print d2.find('/sub')[0] 
&test; 
>>> d2.find('/sub').getchildren() 
[&test;] 
+0

是啊,這似乎已經做到了的子節點,謝謝。 – 2010-03-26 15:59:48

+16

不客氣,我留下深刻的印象,我能夠幫助你:) – MattH 2010-03-26 16:31:29

+2

還有什麼伊格納西奧不知道;) – user825904 2012-12-10 01:57:29