English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pythonを使ってXMLファイルをHTMLファイルに解析する実現方法

機能はタイトルに記載されています。私の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(メールを送信する際には、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認がつき、このサイトは侵害された内容をすぐに削除します。

おすすめ