今回は、Python と XML を組み合わせるための実践的なチュートリアルをお届けします。Python と XML を組み合わせる際の 注意事項 は何ですか?実際の事例を見てみましょう。
このプロジェクトの名前はユニバーサルXMLとは呼ばれず、XMLファイルを元に<website> <page name="index" title="Home page"> <h1>Welcome to my Home page</h1> <p>Hi, there. My name is Mr.gumby,and this is my home page,here are some of my int:</p> <ul> <li><a href="interests/shouting.html" rel="external nofollow" >Shouting</a></li> <li><a href="interests/sleeping.html" rel="external nofollow" >Sleeping</a></li> <li><a href="interests/eating.html" rel="external nofollow" >Eating</a></li> </ul> </page> <directory name="interests"> <page name="shouting" title="Shouting"> <h1>shouting page</h1> <p>....</p> </page> <page name="sleeping" title="Sleeping"> <h1>sleeping page</h1> <p>...</p> </page> <page name="eating" title="Eating"> <h1>Eating page</h1> <p>....</p> </page> </directory> </website>
コードのこの部分を見てみましょう。この本の実装はより複雑で柔軟です。まずはそれを見てから分析しましょう。
from xml.sax.handler import ContentHandler from xml.sax import parse import os class Dispatcher: def dispatch(self, prefix, name, attrs=None): mname = prefix + name.capitalize() dname = 'default' + prefix.capitalize() method = getattr(self, mname, None) if callable(method): args = () else: method = getattr(self, dname, None) args = name, if prefix == 'start': args += attrs, if callable(method): method(*args) def startElement(self, name, attrs): self.dispatch('start', name, attrs) def endElement(self, name): self.dispatch('end', name) class WebsiteConstructor(Dispatcher, ContentHandler): passthrough = False def init(self, directory): self.directory = [directory] self.ensureDirectory() def ensureDirectory(self): path = os.path.join(*self.directory) print path print '----' if not os.path.isdir(path): os.makedirs(path) def characters(self, chars): if self.passthrough: self.out.write(chars) def defaultStart(self, name, attrs): if self.passthrough: self.out.write('<' + name) for key, val in attrs.items(): self.out.write(' %s="%s"' %(key, val)) self.out.write('>') def defaultEnd(self, name): if self.passthrough: self.out.write('</%s>' % name) def startDirectory(self, attrs): self.directory.append(attrs['name']) self.ensureDirectory() def endDirectory(self): print 'endDirectory' self.directory.pop() def startPage(self, attrs): print 'startPage' filename = os.path.join(*self.directory + [attrs['name']+'.html']) self.out = open(filename, 'w') self.writeHeader(attrs['title']) self.passthrough = True def endPage(self): print 'endPage' self.passthrough = False self.writeFooter() self.out.close() def writeHeader(self, title): self.out.write('<html>\n <head>\n <title>') self.out.write(title) self.out.write('</title>\n </head>\n <body>\n') def writeFooter(self): self.out.write('\n </body>\n</html>\n') parse('website.xml',WebsiteConstructor('public_html'))
html タグ と XML ノードを単純に処理します。ディスパッチの複雑さは、関数を動的に組み合わせて実行するために使用されることです。
dispatchの処理の考え方は、まず渡されたパラメータ(つまりオペレーション名とノード名)を元にstartPageなどの対応する関数があるかどうかを判断し、存在しない場合はdefault+オペレーション名を実行します。 :defaultStart など。 各機能を一つ一つ理解すると、全体の処理の流れが分かります。まず、Web サイト全体を保存する public_html ファイルを作成し、次に XML ノードを読み取り、startElement と endElement を通じてディスパッチを呼び出して処理します。次に、dispatch が特定の処理関数を呼び出す方法について説明します。 この時点で、このプロジェクトの分析は完了しました。 マスターする主な内容は、Python で XML を処理するための SAX の使用であり、もう 1 つは、パラメーターを渡す際の getattr やアスタリスクなどの Python の関数の使用です...以降の方法はマスターできたと思います。この記事の事例などを読んでみてください。とても興味深いですね。php 中国語 Web サイトの他の関連記事にも注目してください。 推奨書籍:Python でデータ フレーム内のデータをデータベースに書き込む方法
Python レプリケーションでオブジェクトのライフ サイクルを使用する方法
以上がPythonとXMLを組み合わせる実践的なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。