English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
功能就是题目所述,我的python2.7,装在windows环境,我使用的开发工具是wingide 6.0
1、首先是我设计的简单的一个xml文件,也就是用来解析的源文件
下面是这个文件website.xml内容:
<website> <page name="index" title="[#1#]"> <h1>welcome to</h1> <p>this is a moment</p> <ul> <li><a href="shouting.html" rel="external nofollow" >Shouting</a></li> </ul> </page> <page name="shouting" title="[#2#]"> <h1>My name is likeyou</h1> </page> </website>
解释:page就是对应一个html文件,这里有两个page也就是要解析成两个html文件,然后分别是index.html和shouting.html,其中在index.html中通过<a>链接转到shouting.html文件中显示shouting.html文件的内容
2、python代码实现解析(xmltest.py)
#!D:\Python27\python.exe #-*- coding:utf-8 -*- from xml.sax import parse from xml.sax.handler import ContentHandler class PageCreate(ContentHandler): pagethrough = False def startElement(self, name, attrs): if name == 'page': self.pagethrough = True self.out = open(attrs['name'] + '.html', 'w') self.out.write('<html>\n<head>\n) self.out.write('<title>%s</title>\n' %(attrs['title'])) self.out.write('</head>\n<body>\n') elif self.pagethrough: self.out.write('<') self.out.write(name) for str,val in attrs.items(): self.out.write(' %s="%s"' %(str, val)) self.out.write('>') def endElement(self, name): if name == 'page': self.out.write('</body>\n</html>') self.pagethrough = False self.out.close() if self.pagethrough: self.out.write('<') self.out.write('/' + name) self.out.write('>') def characters(self, content): if self.pagethrough: self.out.write(content) parse('D:\\pyproject\\file\\website.xml', PageCreate())
توضيح الكود:
استخدام طريقة تحليل xml.sax لاستدعاء طريقة التحليل، قمت بإنشاء فئة تحليل خاصة، وراثت ContentHandler، وأعدت كتابة طرق startelement وendelement وcharactors، طريقة startelement تستدعي عند العثور على علامة البداية في ملف xml، مثل <a>،<h1>،passthrough هو لتحديد ما إذا كنت في علامة page،الصحيح يعني أنك في داخل علامة page، وهي عناصر صفحة الحالية، لأن xml.sax يركز على العلامات، و لا يهم ما إذا كنت في أي صفحة، ثم كود التالي هو مفهوم بسهولة، وهو إضافة علامات بداية html مثل <html><head><body>،لاحظ أن attrs تخزن خصائص العلامة، مثل <page>name="shouting"،name="index"،إذن attrs تخزن هذا الشئ name="shouting"،وهكذا يمكن الحصول على name في attrs كاسم ملف html،بنفس الطريقة،href=…… في <a> يمكن الحصول عليه من هذه البيانات،وخزنها في المتغيرات str وval،ثم كتابتها في الملف من خلال write.
ثم يتم استدعاء "endelement" عند الوصول إلى العلامات الخليفة مثل </h1>، لإضافة العلامات الخليفة، إذا كان نهاية الملف، فإنه سيكون </page>، في هذه الحالة يتم إضافة العلامات الخليفة النهائية مثل </html> و</body>، وإلا فإنه يكون العلامات الخليفة للعناصر في صفحة "page"
يُضاف "characters" إلى النص بين العلامات المفتوحة والخليفة
في النهاية، بعد تشغيل كود Python، يمكنك رؤية أن هناك ملفين HTML تم إنشاؤهما في نفس الدليل، هما shouting.html وindex.html، افتح index.html لرؤية رابط يُدعى "shouting"، عند النقر عليه سيتم فتح shouting.html
إذن، هذه الطريقة التي يتم بها تحويل ملف XML إلى ملف HTML باستخدام Python هي كل المحتوى الذي يشاركه المحرر معكم، آمل أن تكون قدمنا لكم مرجعًا، ونأمل أيضًا أن تشجعوا على دعم تعليمات النوايا.
البيان: محتويات هذا المقال تم جمعها من الإنترنت، ملكية المحتوى للمالك الأصلي، تم جمع المحتوى من قبل المستخدمين على الإنترنت بطرقهم الخاصة، ويستخدم هذا الموقع فقط، وليس لديه حقوق الملكية، ويتمتع بمعالجة إدارية يدوية، ولا يتحمل أي مسؤولية قانونية. إذا اكتشفت محتوى يشتبه في حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال #بـ@ عند إرسال البريد الإلكتروني) للإبلاغ، وقدم الدليل على الدليل، إذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المزعوم عن حقوق النسخ فوراً.