<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>taichino.com &#187; pyxml2obj</title>
	<atom:link href="http://taichino.com/tag/pyxml2obj/feed" rel="self" type="application/rss+xml" />
	<link>http://taichino.com</link>
	<description>永遠のネバーランド</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:33:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>XML::Simpleっぽいpythonモジュール書いた</title>
		<link>http://taichino.com/programming/1516</link>
		<comments>http://taichino.com/programming/1516#comments</comments>
		<pubDate>Wed, 03 Feb 2010 17:14:18 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pyxml2obj]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1516</guid>
		<description><![CDATA[Yahooの形態素解析APIを使おうと思ったら、XML形式しか対応してなかったので、Perlで言うところのXML::Simpleなpythonモジュールを探したのですが見つかりませんでした。XML::SimpleはXMLとPerlのハッシュ(と配列の混合オブジェクト)を相互に変換するモジュールで、ちょっとしたXMLの処理をするには非常に便利なので残念です。普通にDOMを弄っても良かったのですが、Python クックブックにベースとなるコードを見つけた事もあり、勢いでXML::Simpleを(中途半端に)移植してみました。 モジュール名はpyxml2objでXML::Simpleと同様にXMLinとXMLoutを実装してあります。このモジュールを使うと以下の様な感じで、XMLとpyhtonの辞書(とリストの混合オブジェクト)を相互変換できます。 from pyxml2obj import XMLin, XMLout xml = &#34;&#34;&#34; &#60;config logdir=&#34;/var/log/foo/&#34; debugfile=&#34;/tmp/foo.debug&#34;&#62; &#60;server name=&#34;sahara&#34; osname=&#34;solaris&#34; osversion=&#34;2.6&#34;&#62; &#60;address&#62;10.0.0.101&#60;/address&#62; &#60;address&#62;10.0.1.101&#60;/address&#62; &#60;/server&#62; &#60;server name=&#34;gobi&#34; osname=&#34;irix&#34; osversion=&#34;6.5&#34;&#62; &#60;address&#62;10.0.0.102&#60;/address&#62; &#60;/server&#62; &#60;server name=&#34;kalahari&#34; osname=&#34;linux&#34; osversion=&#34;2.0.34&#34;&#62; &#60;address&#62;10.0.0.103&#60;/address&#62; &#60;address&#62;10.0.1.103&#60;/address&#62; &#60;/server&#62; &#60;/config&#62; &#34;&#34;&#34; obj = XMLin&#40;xml&#41; # xml to object print obj # 以下出力を整形 # {u'debugfile': u'/tmp/foo.debug', u'logdir': u'/var/log/foo/', # u'server': { [...]]]></description>
			<content:encoded><![CDATA[<p>Yahooの形態素解析APIを使おうと思ったら、XML形式しか対応してなかったので、Perlで言うところの<a href="http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm">XML::Simple</a>なpythonモジュールを探したのですが見つかりませんでした。XML::SimpleはXMLとPerlのハッシュ(と配列の混合オブジェクト)を相互に変換するモジュールで、ちょっとしたXMLの処理をするには非常に便利なので残念です。普通にDOMを弄っても良かったのですが、<a href="http://www.amazon.co.jp/gp/product/4873112761?ie=UTF8&#038;tag=taichino-22&#038;linkCode=as2&#038;camp=247&#038;creative=7399&#038;creativeASIN=4873112761">Python クックブック</a><img src="http://www.assoc-amazon.jp/e/ir?t=taichino-22&#038;l=as2&#038;o=9&#038;a=4873112761" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />にベースとなるコードを見つけた事もあり、勢いでXML::Simpleを(中途半端に)移植してみました。</p>
<p><span id="more-1516"></span></p>
<p>モジュール名はpyxml2objでXML::Simpleと同様にXMLinとXMLoutを実装してあります。このモジュールを使うと以下の様な感じで、XMLとpyhtonの辞書(とリストの混合オブジェクト)を相互変換できます。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> pyxml2obj <span style="color: #ff7700;font-weight:bold;">import</span> XMLin, XMLout
<span style="color: #dc143c;">xml</span> = <span style="color: #483d8b;">&quot;&quot;&quot;
&lt;config logdir=&quot;/var/log/foo/&quot; debugfile=&quot;/tmp/foo.debug&quot;&gt;
    &lt;server name=&quot;sahara&quot; osname=&quot;solaris&quot; osversion=&quot;2.6&quot;&gt;
      &lt;address&gt;10.0.0.101&lt;/address&gt;
      &lt;address&gt;10.0.1.101&lt;/address&gt;
    &lt;/server&gt;
    &lt;server name=&quot;gobi&quot; osname=&quot;irix&quot; osversion=&quot;6.5&quot;&gt;
      &lt;address&gt;10.0.0.102&lt;/address&gt;
    &lt;/server&gt;
    &lt;server name=&quot;kalahari&quot; osname=&quot;linux&quot; osversion=&quot;2.0.34&quot;&gt;
      &lt;address&gt;10.0.0.103&lt;/address&gt;
      &lt;address&gt;10.0.1.103&lt;/address&gt;
    &lt;/server&gt;
&lt;/config&gt;
&quot;&quot;&quot;</span>
obj = XMLin<span style="color: black;">&#40;</span><span style="color: #dc143c;">xml</span><span style="color: black;">&#41;</span>   <span style="color: #808080; font-style: italic;"># xml to object</span>
<span style="color: #ff7700;font-weight:bold;">print</span> obj
<span style="color: #808080; font-style: italic;"># 以下出力を整形</span>
<span style="color: #808080; font-style: italic;"># {u'debugfile': u'/tmp/foo.debug', u'logdir': u'/var/log/foo/',</span>
<span style="color: #808080; font-style: italic;">#     u'server': {</span>
<span style="color: #808080; font-style: italic;">#	    u'gobi':     {u'osversion': u'6.5', u'address': u'10.0.0.102', u'osname': u'irix'},</span>
<span style="color: #808080; font-style: italic;">#	    u'kalahari': {u'osversion': u'2.0.34', u'address': [u'10.0.0.103', u'10.0.1.103'], u'osname': u'linux'},</span>
<span style="color: #808080; font-style: italic;">#	    u'sahara':   {u'osversion': u'2.6', u'address': [u'10.0.0.101', u'10.0.1.101'], u'osname': u'solaris'}}}</span>
&nbsp;
dic = <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'country'</span> : <span style="color: black;">&#123;</span>
      <span style="color: #483d8b;">'England'</span> : <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'capital'</span> : <span style="color: #483d8b;">'London'</span> <span style="color: black;">&#125;</span>,
      <span style="color: #483d8b;">'France'</span>  : <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'capital'</span> : <span style="color: #483d8b;">'Paris'</span> <span style="color: black;">&#125;</span>,
      <span style="color: #483d8b;">'Turkey'</span>  : <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'capital'</span> : <span style="color: #483d8b;">'Istanbul'</span> <span style="color: black;">&#125;</span>,
      <span style="color: black;">&#125;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> XMLout<span style="color: black;">&#40;</span>dic<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># object to xml</span>
<span style="color: #808080; font-style: italic;"># 以下出力そのまま</span>
<span style="color: #808080; font-style: italic;"># &lt;root&gt;</span>
<span style="color: #808080; font-style: italic;">#   &lt;country capital=&quot;Istanbul&quot; name=&quot;Turkey&quot; /&gt;</span>
<span style="color: #808080; font-style: italic;">#   &lt;country capital=&quot;London&quot; name=&quot;England&quot; /&gt;</span>
<span style="color: #808080; font-style: italic;">#   &lt;country capital=&quot;Paris&quot; name=&quot;France&quot; /&gt;</span>
<span style="color: #808080; font-style: italic;"># &lt;/root&gt;</span></pre></div></div>

<p>内部ではxml.saxモジュールを使ってXMLのパースを行っています。これで非常に簡単にXMLを扱えるようになりましたね。最初は半日くらいで出来るかと思ったのですが、テスト等で手間取って結局丸まる３日かかりまして、壮大なヤクの毛刈りになってしまいました。。</p>
<p>なお今回も調子に乗ってpypiに登録したのでインストールはeasy_installから。ソースは<a href="http://github.com/taichino/pyxml2obj">github</a>から。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ easy_install pyxml2obj</pre></div></div>

<p>本当はpyxmlsimpleという名前にしたかったのですが、既に使われていたので適当につけました。</p>
<p>あと最初に中途半端にと書きましたが、オプション対応が面倒だったので、あんまり使わなさそうなのは、ごっそり消しました。ごめんなさい。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/1516/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

