الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قراءة ملف xml بواسطة PyQt4.QtCore.QXmlStreamReader

بدأه a.atalla في 10 أغسطس 2011 · 4 رد · 715 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في برنامج برق لدي ملف xml يخزن حالة التحميلات الحالية

<?xml version="1.0" encoding="UTF-8"?>
<Download Gid="1">
    <fileName>oneiric-desktop-amd64.iso</fileName>
    <Url>http://cdimage.ubuntu.com/releases/oneiric/alpha-3/oneiric-desktop-amd64.iso</Url>
    <Status>active</Status>
    <Size>743.75 Mb</Size>
</Download>
<Download Gid="2">
    <fileName>pmagic-6.1.iso</fileName>
    <Url>http://downloads.sourceforge.net/partedmagic/pmagic-6.1.iso</Url>
    <Status>active</Status>
    <Size>170.92 Mb</Size>
</Download>
<Download Gid="3">
    <fileName>salix64-xfce-13.37.iso</fileName>
    <Url>http://downloads.sourceforge.net/salix/salix64-xfce-13.37.iso</Url>
    <Status>active</Status>
    <Size>608.16 Mb</Size>
</Download>

أستخدم هذه الدالة لقراءة الملف

    def offlineData(self):  #Fille Gui from saved data when no internet connection
        #Read Data from Status.xml
        xmlFile = QtCore.QFile(homeDir+"/.Barq/Status.xml")
        xmlFile.open(QtCore.QFile.ReadOnly)
        reader = QtCore.QXmlStreamReader(xmlFile)
        i=0      
        while not (reader.atEnd() & reader.hasError()):
            reader.readNext()
            if reader.name().toString() == "Download":
                gid = reader.attributes().value("Gid")
                print str(gid)
            if reader.isStartElement():
                if reader.name().toString() == "fileName":
                    fileName = str(reader.readElementText())
                    print fileName
                if reader.name().toString() == "Url":
                    url = str(reader.readElementText())
                    print url
                if reader.name().toString() == "Status":
                    status = str(reader.readElementText())
                    print status
                if reader.name().toString() == "Size":
                    size = str(reader.readElementText())
                    print size

ناتج تنفيذ هذه الدالة ليس كما اتوقع فهو كالتالي

1
oneiric-desktop-amd64.iso
http://cdimage.ubuntu.com/releases/oneiric/alpha-3/oneiric-desktop-amd64.iso
active
743.75 Mb

2

المفترض أن يكون الناتج كالتالي

1
oneiric-desktop-amd64.iso
http://cdimage.ubuntu.com/releases/oneiric/alpha-3/oneiric-desktop-amd64.iso
active
743.75 Mb
2
pmagic-6.1.iso
http://downloads.sourceforge.net/partedmagic/pmagic-6.1.iso
active
170.92 Mb
3
salix64-xfce-13.37.iso
http://downloads.sourceforge.net/salix/salix64-xfce-13.37.iso
active
608.16 Mb

تري ما الخطأ في الكود ؟؟؟؟

#2

السلام عليكم

أعد صياغة ملف الـ xml بحيث يحوي document element

وليكن Downloads

هكذا

<?xml version="1.0" encoding="UTF-8"?>
<Downloads>
	<Download Gid="1">
	    <fileName>oneiric-desktop-amd64.iso</fileName>
	    <Url>http://cdimage.ubuntu.com/releases/oneiric/alpha-3/oneiric-desktop-amd64.iso</Url>
	    <Status>active</Status>
	    <Size>743.75 Mb</Size>
	</Download>
	<Download Gid="2">
	    <fileName>pmagic-6.1.iso</fileName>
	    <Url>http://downloads.sourceforge.net/partedmagic/pmagic-6.1.iso</Url>
	    <Status>active</Status>
	    <Size>170.92 Mb</Size>
	</Download>
	<Download Gid="3">
	    <fileName>salix64-xfce-13.37.iso</fileName>
	    <Url>http://downloads.sourceforge.net/salix/salix64-xfce-13.37.iso</Url>
	    <Status>active</Status>
	    <Size>608.16 Mb</Size>
	</Download>
<Downloads>

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#3

واذا اردت تفادي الفاصل بين كل Download

عذرا عدلت بالدالة لتلائم PySide

from PySide import QtCore 
def offlineData():  #Fille Gui from saved data when no internet connection
	#Read Data from Status.xml
	xmlFile = QtCore.QFile("try.xml")
	xmlFile.open(QtCore.QFile.ReadOnly)
	reader = QtCore.QXmlStreamReader(xmlFile)
	i=0	  
	while not (reader.atEnd() & reader.hasError() ):
		reader.readNext()

		while not reader.atEnd() and not reader.isStartElement()  : 
			reader.readNext()

		if reader.name() == "Download":
			gid = reader.attributes().value("Gid")
			print str(gid)

		if reader.isStartElement():
			if reader.name() == "fileName":
				fileName = str(reader.readElementText())
				print fileName
			if reader.name() == "Url":
				url = str(reader.readElementText())
				print url
			if reader.name() == "Status":
				status = str(reader.readElementText())
				print status
			if reader.name() == "Size":
				size = str(reader.readElementText())
				print size

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#4

جزاك الله خير ....... تم ما أريد

هل المشكلة في طريقة القراءة اللتي أستخدمتها , وما أهمية document element ????

#5

حسب w3c

ملف الـ XML لا يكون جيد التنسيق

الا اذا اتبع التعريف

document ::= prolog element Misc*

الملف = برولوج وسم أخرى*

prolog أو برولوج = التعريف تعليق* مسافة*

element او وسم = [ وسم الـ Document Element ]

Misc أو أخرى = مسافة* تعليق*

مسافة = المسافة* الجدولة* سطرجديد*

للمزيد Well-Formed XML Documents

http://www.w3.org/TR/2008/REC-xml-20081126/#sec-well-formed

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

مواضيع مشابهة