2016-05-20 15 views
-2

Ich habe ein Python-Skript (2.7), das XML-Daten erzeugt. Doch für jedes Objekt in meinem Array muss ich es eine neue laufende Nummer erzeugen unten mit 1.Wie generiere ich fortlaufende Nummern in xml? (Python 2.7)

Beispiel beginnen (siehe sequenceOrder Tag):

<objectArray> 
    <object> 
     <title>Title</title> 
     <sequenceOrder>1</sequenceOrder> 
    </object> 
    <object> 
     <title>Title</title> 
     <sequenceOrder>2</sequenceOrder> 
    </object> 
    <object> 
     <title>Title</title> 
     <sequenceOrder>3</sequenceOrder> 
    </object> 
</objectArray> 

mit Python 2.7, wie kann ich meine Skript erzeugt eine neue Nummer (+1 der Zahl davor) für den SequenzOrder Teil jedes Objekts in meinem XML-Array?

Bitte beachten Sie, dass es in meinem Array Hunderttausende von Objekten gibt, also etwas zu beachten.

Ich bin völlig neu in Python/Codierung im Allgemeinen, so dass jede Hilfe geschätzt wird! Froh, zusätzliche Informationen bei Bedarf bereitzustellen.

+0

Wird der Titel durchgehend gleich bleiben? –

+2

Wie generiert Ihr Skript das XML? BEACHTEN Sie Ihre Frage und fügen Sie den relevanten Teil Ihres Codes hinzu. –

+0

@VedangMehta Nein, aber ich habe bereits den Titel Teil des Skripts konfiguriert. – clingy

Antwort

0

Wenn Sie selbst Objekte erstellen, die serialisiert werden sollen, können Sie itertools.count verwenden, um aufeinanderfolgende eindeutige Ganzzahlen zu erhalten.

In einer sehr abstrakten Weise es aussehen werden:

import itertools 
counter = itertools.count() 

o = create_object() 
o.sequentialNumber = next(counter) 

o2 = create_another_object() 
o.sequentialNumber = next(counter) 

create_xml_doc(my_objects) 
+0

Danke, ich schaue mal rein! – clingy

0

Ja, eine neue Sequenznummer für jedes XML-Element erzeugen kann. Hier ist, wie Sie Ihre Beispielausgabe lxml mit produzieren:

import lxml.etree as et 

root = et.Element('objectArray') 
for i in range(1, 4): 
    obj = et.Element('object') 
    title = et.Element('title') 
    title.text = 'Title' 
    obj.append(title) 
    sequenceOrder = et.Element('sequenceOrder') 
    sequenceOrder.text = str(i) 
    obj.append(sequenceOrder) 
    root.append(obj) 

print et.tostring(root, pretty_print=True) 
+0

Das setzt voraus, dass Sie Ihre Reichweite wissen? – clingy

0

Ein Kollege bot eine Lösung:

gesetzt

sequence_order = 1 

dann in xml

<sequenceOrder>""" + str(sequence_order) + """</sequenceOrder> 

dann später

if test is False: 
        with open('uniquetest.csv', 'a') as write: 
         writelog = csv.writer(write, delimiter= '\t', quoting=csv.QUOTE_ALL) 
         writelog.writerow((title,)) 

        try: 
         f = open(file + '_output.xml', 'r') 
         f = open(file + '_output.xml', 'a') 
         f.write(DASxml_bottom + DASxml_top + digital_objects) 
         f.close() 
         sequence_order = sequence_order + 1 
#      f = open('log.txt', 'a') 
#      f.write(title + str(roll) + label_flag + str(id) + str(file_size) + file_path + """ 
# """) 
#      f.close() 

Das könnte für einige keinen Sinn ergeben, da ich nicht das ganze Skript zur Verfügung stellte, aber es funktionierte für meine Zwecke! Vielen Dank für die Vorschläge

Verwandte Themen