2016-07-19 5 views
0

Ich versuche, einige spezifische Felder aus einer riesigen XML-Datei zu extrahieren. hier ist ein Beispiel:lxml Ignorieren von Tags die kommen zwischen einem spcific Tag

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE dblp SYSTEM "dblp.dtd"> 
    <dblp> 

<article mdate="2009-09-24" key="journals/jasis/GianoliM09"> 
<author>Ernesto Gianoli</author> 
<author>Marco A. Molina-Montenegro</author> 
<title>Insights into the relationship between the <i>h</i>-index and self-citations.</title> 
<pages>1283-1285</pages> 
<year>2009</year> 
<volume>60</volume> 
<journal>JASIST</journal> 
<number>6</number> 
<ee>http://dx.doi.org/10.1002/asi.21042</ee> 
<url>db/journals/jasis/jasis60.html#GianoliM09</url> 
</article> 


<article mdate="2014-09-18" key="journals/iacr/ShiCSL11" publtype="informal publication"> 
<author>Elaine Shi</author> 
<author>T.-H. Hubert Chan</author> 
<author>Emil Stefanov</author> 
<author>Mingfei Li</author> 
<title>blivious RAM with O((log N)<sup>3</sup>) Worst-Case Cost.</title> 
<pages>407</pages> 
<year>2011</year> 
<volume>2011</volume> 
<journal>IACR Cryptology ePrint Archive</journal> 
<ee>http://eprint.iacr.org/2011/407</ee> 
<url>db/journals/iacr/iacr2011.html#ShiCSL11</url> 
</article> 

<phdthesis mdate="2016-05-04" key="phd/it/Popescu2008"> 
<author>Razvan Andrei Popescu</author> 
<title>Aggregation and adaptation of web services: a semi-automated methodology for the aggregation and adaption of web services.</title> 
<year>2008</year> 
<school>University of Pisa</school> 
<pages>1-206</pages> 
<isbn>978-3-8364-6280-8</isbn> 
<ee>http://d-nb.info/991165179</ee> 
</phdthesis><phdthesis mdate="2007-04-26" key="phd/Tsangaris92"> 
<author>Manolis M. Tsangaris</author> 
<title>Principles of Static Clustering for Object Oriented Databases</title> 
<year>1992</year> 
<school>Univ. of Wisconsin-Madison</school> 
</phdthesis> 

<phdthesis mdate="2005-11-30" key="phd/Heuer2002"> 
<author>Andreas Heuer 0002</author> 
<title>Web-Pr&auml;senz-Management im Unternehmen</title> 
<year>2002</year> 
<school>Univ. Trier, FB 4, Informatik</school> 
<ee>http://ubt.opus.hbz-nrw.de/volltexte/2004/144/</ee> 
</phdthesis> 

<mastersthesis mdate="2002-01-03" key="phd/Schulte92"> 
<author>Christian Schulte</author> 
<title>Entwurf und Implementierung eines &uuml;bersetzenden Systems f&uuml;r das intuitionistische logische Programmieren auf der Warren Abstract Machine.</title> 
<year>1991</year> 
<school>Universit&auml;t Karlsruhe, Institut f&uuml;r Logik, Komplexit&auml;t und Deduktionssysteme</school> 
</mastersthesis> 

<phdthesis mdate="2002-01-03" key="phd/Hellerstein95"> 
<author>Joseph M. Hellerstein</author> 
<title>Optimization and Execution Techniques for Queries With Expensive Methods</title> 
<year>1995</year> 
<school>Univ. of Wisconsin-Madison</school> 
</phdthesis> 

</dblp> 

und ich verwende den Code here die Felder zu analysieren und zu extrahieren, die mich interessieren Das Problem entsteht, wenn ich den Titel im ersten Fall und dem zweiten Fall extrahiert werden soll, weil. der <i>h</i> und <sup>3</sup> Tags. Es scheint, mein Code sie als neue Ereignisse zu sehen, aber nicht als Teil des <title> Tages und ich folgendes Ergebnis:

title Insights into the relationship between the 
blivious RAM with O((log N) 

im Grunde habe ich den Titeltext, bis der Parser einen neuen Tag zu erfüllen.

Das Problem ist, ich weiß nicht, wie viele solcher Fälle (z. B. verschiedene Tags) habe ich, sonst könnte ich versuchen, sie manuell zu entfernen. Gibt es überhaupt solche Fälle?

Antwort

1

Sie müssen das lxml-Datenmodell für den Elementinhalt kennen (insbesondere die tail-Eigenschaft). Es wird hier gut erklärt: http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html.

Der Inhalt der text Eigenschaft dieses Elements

<title>Insights into the relationship between the <i>h</i>-index and self-citations.</title> 

Insights into the relationship between the ist.

Das h Bit ist die text des <i> Kind-Element und -index and self-citations. ist die tail des gleichen Kindes.


Um den gesamten Text Inhalt des Titels zu erhalten, können Sie itertext() verwenden. Beispiel:

from lxml import etree 

tree = etree.parse("dblp.xml") # The XML in the question 
titles = tree.xpath("//title") 

for title in titles: 
    print ''.join(title.itertext()) 

Ausgang:

Insights into the relationship between the h-index and self-citations. 
blivious RAM with O((log N)3) Worst-Case Cost. 
Aggregation and adaptation of web services: a semi-automated methodology for the aggregation and adaption of web services. 
Principles of Static Clustering for Object Oriented Databases 
Web-Präsenz-Management im Unternehmen 
Entwurf und Implementierung eines übersetzenden Systems für das intuitionistische logische Programmieren auf der Warren Abstract Machine. 
Optimization and Execution Techniques for Queries With Expensive Methods 
Verwandte Themen