2010-01-14 19 views
6

Lütfen sorunumu lxml
ile çözmemde bana yardımcı olun (lxml için yeni bir kullanıcıyım).
nasıl sonraki dosyasından "Yorum 1" alabilirsiniz:XML ile ayrıştırma lxml ve Python

<?xml version="1.0" encoding="windows-1251" standalone="yes" ?> 
<!--Comment 1--> 
<a> 
    <!--Comment 2--> 
</a> 
+3

IIRC, Yorum 1, yorum olduğu için xml ayrıştırıcısına erişilemiyor. sadece dosyayı metin olarak okumak zorunda kalabilirsiniz. – KevinDTimm

+0

Bir cevabı kabul etmeyi planlıyor musunuz? –

cevap

6
>>> from lxml import etree 
>>> tree = etree.parse('filename.xml') 
>>> root = tree.getroot() 
>>> print root.getprevious() 
<!--Comment 1--> 

Veya emin olmak için (birden fazla olabilir):

>>> for i in root.itersiblings(tag=etree.Comment, preceding=True): 
...  print i 
... 
<!--Comment 1--> 

.text niteliğini eğer kullanın Yorum metnini çıkarmak istersiniz.

12

Dokümanlar: the lxml tutorial ve "Yorumlar" için arama

Kodu:

import lxml.etree as et 

text = """\ 
<?xml version="1.0" encoding="windows-1251" standalone="yes" ?> 
<!--Comment 1a--> 
<!--Comment 1b--> 
<a> waffle 
    <!--Comment 2--> 
    blah blah 
</a> 
<!--Comment 3a--> 
<!--Comment 3b--> 
""" 
print "\n=== %s ===" % et.__name__ 
root = et.fromstring(text) 

for pre in (True, False): 
    for comment in root.itersiblings(tag=et.Comment, preceding=pre): 
     print pre, comment 

for elem in root.iter(): 
    print 
    print isinstance(elem.tag, basestring), elem.__class__.__name__, repr(elem.tag), repr(elem.text), repr(elem.tail) 

Çıktı:

=== lxml.etree === 
True <!--Comment 1b--> 
True <!--Comment 1a--> 
False <!--Comment 3a--> 
False <!--Comment 3b--> 

True _Element 'a' ' waffle\n ' None 

False _Comment <built-in function Comment> 'Comment 2' '\n blah blah\n' 

Yorumlar: xml.etree.cElementTree

ile çalışmıyor