Parsing XPath in Nicht-Standard-XML mit lxml Python

Ich versuche, eine Datenbank aller Patentinformationen von Google Patente zu erstellen. Ein Großteil meiner bisherigen Arbeit hat diese sehr gute Antwort von MattH in Python benutzt, um nicht standardmäßige XML-Datei zu analysieren . Mein Python ist zu groß, um so zu sehen, dass es hier verknüpft ist .

Die Quelldateien sind hier : ein Bündel von XML-Dateien, die zusammen in einer Datei mit mehreren Headern angehängt werden. Das Problem versucht, den korrekten xpath-Ausdruck zu verwenden, wenn er diese ungewöhnliche "Nicht-Standard" -D XML-Datei mit mehreren xml– und dtd-Deklarationen analysiert. Ich habe versucht, "-".join(doc.xpath , um alles zusammen zu "-".join(doc.xpath , wenn es "-".join(doc.xpath , aber die Ausgabe schafft Leerzeichen, die durch Bindestriche für die <document-id> und <classification-national> unten gezeigt sind

 <references-cited> <citation> <patcit num="00001"> <document-id> <country>US</country> <doc-number>534632</doc-number> <kind>A</kind> <name>Coleman</name> <date>18950200</date> </document-id> </patcit> <category>cited by examiner</category> <classification-national><country>US</country> <main-classification>249127</main-classification></classification-national> </citation> 

Beachten Sie, dass nicht alle Kinder in jedem <citation> , manchmal sind sie überhaupt nicht vorhanden.

Wie kann ich diesen xpath analysieren, während ich versuche, Bindestriche zwischen jedem Dateneingang für mehrere Einträge unter <citation> ?

One Solution collect form web for “Parsing XPath in Nicht-Standard-XML mit lxml Python”

Von diesem XML (references.xml),

 <references-cited> <citation> <patcit num="00001"> <document-id> <country>US</country> <doc-number>534632</doc-number> <kind>A</kind> <name>Coleman</name> <date>18950200</date> </document-id> </patcit> <category>cited by examiner</category> <classification-national> <country>US</country> <main-classification>249127</main-classification> </classification-national> </citation> <citation> <patcit num="00002"> <document-id> <country>US</country> <doc-number>D28957</doc-number> <kind>S</kind> <name>Simon</name> <date>18980600</date> </document-id> </patcit> <category>cited by other</category> </citation> </references-cited> 

Sie können den Textinhalt von jedem Nachkomme von <citation> , der irgendwelche Inhalte wie folgt hat:

 from lxml import etree doc = etree.parse("references.xml") cits = doc.xpath('/references-cited/citation') for c in cits: descs = c.xpath('.//*') for d in descs: if d.text and d.text.strip(): print "%s: %s" %(d.tag, d.text) print 

Ausgabe:

 country: US doc-number: 534632 kind: A name: Coleman date: 18950200 category: cited by examiner country: US main-classification: 249127 country: US doc-number: D28957 kind: S name: Simon date: 18980600 category: cited by other 

Diese Variation:

 import sys from lxml import etree doc = etree.parse("references.xml") cits = doc.xpath('/references-cited/citation') for c in cits: descs = c.xpath('.//*') for d in descs: if d.text and d.text.strip(): sys.stdout.write("-%s" %(d.text)) print 

Ergibt diese leistung:

 -US-534632-A-Coleman-18950200-cited by examiner-US-249127 -US-D28957-S-Simon-18980600-cited by other 
  • Wie selektiere ich Elemente in einem iframe mit Xpath?
  • Wie bekomme ich den Pfad eines Elements in lxml?
  • Python-xpath-Abfrage, die keinen Textwert zurückgibt
  • Extrahieren von Tabellen aus einem DOCX Word Dokument in Python
  • Anmeldung mit Webseiten
  • Wie kann ich den richtigen XPath bestimmen?
  • Anfänger zum Schaben, bleib immer leere Listen
  • Lxml XPath position () funktioniert nicht
  • Wie füge ich ein Attribut zu einem Tag hinzu, das mit xpath in lxml in Python gefunden wurde?
  • Wie finde ich XML-Elemente über XPath in Python in einer namenpace-agnostischen Weise?
  • Leere Liste mit scrapy und Xpath
  • Python ist die beste Programmiersprache der Welt.