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ファイルであり、ここには2つのpageがあります。それゆえ、2つの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> <head> ') 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解析メソッドのparseメソッドを呼び出して解析を行い、ContentHandlerを継承した解析クラスを作成し、startelementとendelement、charactorsメソッドをそれぞれオーバーライドしました。startelementメソッドはxmlファイル内の開始タグが見つかったときに呼び出されます。例えば<a>、<hなど。1>、passthrough変数は現在がpageタグ内にあるかどうかを判断するためのもので、trueはpageタグ内にあることを示し、それが現在のページの要素に該当します。xml.saxはタグに注目しており、現在のpage内かどうかは気にしません。その後のコードは比較的簡単で、htmlの先頭タグ<html><head><body>などを追加するものです。注意してほしいのは、attrsはタグの属性を保存しており、例えば<page>内のname="shouting"、name="index"などがある場合、attrsにはname="shouting"のようなデータが保存され、attrsからname属性内のshoutingとindexを取得して、htmlファイルのファイル名として使用します。同様に<a>内のhref=……もこのデータを基にしてstrとval変数に保存され、ファイルに書き込まれます。
そしてendelementは、</h1>のような終了タグが見つかったときに呼び出し、終了タグを追加します。ファイルの終わりの場合は</page>、この時点で</html>、</body>これらのhtmlの終了タグを追加します。それがなければ、pageページ内の要素の終了タグとなります。
charactersは、開始タグと終了タグの間に見つかった文字列を追加するものです。
最後に、pythonのコードを実行すると、同じディレクトリにshouting.htmlとindex.htmlの2つのhtmlファイルが生成されます。index.htmlを開くと、「shouting」というリンクが見つかり、それをクリックするとshouting.htmlが開かれます。
この記事では、pythonを使用してxmlファイルをhtmlファイルに解析する方法を紹介しました。これは編集者が皆さんに提供する全ての内容です。皆さんに参考になれば幸いです。また、ナラリング教程を応援していただけると嬉しいです。
声明:この記事の内容はインターネットからネットワークで提供されています。著作権はそれぞれの権利者に帰属します。インターネットユーザーによって自発的に貢献し、自己でアップロードされています。このサイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害の可能性がある内容を見つけた場合は、メールでnotice#wまでお知らせください。3codebox.com(メールを送信する際には、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認がつき、このサイトは侵害された内容をすぐに削除します。