目次

目次

PythonでXMLの要素を削除する

アバター画像
福山
アバター画像
福山
最終更新日2017/05/22 投稿日2017/05/22

サンプルとして、CodeZineさんのRSSを参考にしました。 参考にした対象から適当に要素を削除します。

対象

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="../../../../../css/rss/feedRss2.xsl" media="screen" type="text/xsl"?>

<rss version="2.0"> 
  <channel> 
    <title>CodeZine:新着一覧</title>  
    <link>http://codezine.jp/</link>  
    <copyright>Copyright 2007-2014 CodeZine, Shoeisha Co., Ltd. All rights reserved.</copyright>  
    <language>ja-jp</language>  
    <pubDate>Thu, 23 Mar 2017 17:36:49 +0900</pubDate>  
    <description>プログラミングに役立つソースコードが満載な開発者のための実装系Webマガジン</description>  
    <image> 
      <url>http://codezine.jp/static/common/images/logo.gif</url>  
      <title>CodeZine</title>  
      <link>http://codezine.jp/</link> 
    </image>  
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="self" href="http://rss.rssad.jp/rss/codezine/new/20/index.xml" type="application/rss+xml"/>  
    <item> 
      <title>元号変更にも対応! 日本仕様に強いシステム開発のためのコンポーネント</title>  
      <link>http://rss.rssad.jp/rss/artclk/DlzMEkU2485N/558e99e1dc6a10b2eed9115f27f9126f?ul=3ziLBdsjpvHA_5UPLMRfbhJYV7ghWXmMD2fpdg9Kh9SyEc4MdLqRFmDZSBHcLPlEQ8tOZ7R</link>  
      <guid isPermaLink="true">http://codezine.jp/article/detail/9994</guid>  
      <pubDate>Thu, 23 Mar 2017 14:00:00 +0900</pubDate>  
      <description><![CDATA[<p> 業務アプリケーションの多くが、何らかの情報を入力する機能を有しています。そして本記事に目を通していただいている皆様の多くが、日本語の入力や日本で利用されるアプリケーションの作成に携わっているかと思います。これまで、数々のコンポーネントを紹介してきましたが、その際に何度も日本独自の仕様に対応している点をポイントとして挙げてきました。日本の住所入力に強い点、和暦などの日本の文化に対応している点、そして帳票出力への対応。今回は、これまで紹介してきたコンポーネントが日本独自の仕様に強いポイントを紹介していきます。

<img border="0" width="1" height="1" src="http://rss.rssad.jp/rss/artimg/DlzMEkU2485N/558e99e1dc6a10b2eed9115f27f9126f"/></p>]]></description> 
    </item>
    ...
    <item> 
      <title>SlackとElasticsearchを連携し、使いやすい検索システムを作成する</title>  
      <link>http://rss.rssad.jp/rss/artclk/DlzMEkU2485N/96229bb6a9c2bcd798f0e6d3a3c9114c?ul=Hc9CEriyIcQtf1979hdieFPU5lnMFgoUtr3snpwI_yUDx8XU.5bMqtuQQiRErhgSMs9F4g0</link>  
      <guid isPermaLink="true">http://codezine.jp/article/detail/10005</guid>  
      <pubDate>Mon, 13 Mar 2017 14:00:00 +0900</pubDate>  
      <description><![CDATA[<p> 前回はSlackのBotを用いて使いやすい検索システムのUIを作成しました。今回はこれまでに作成した検索用のコンテナとUI提供のコンテナを連携し、質問しやすく使い勝手の良い検索システムを作成します。

<img border="0" width="1" height="1" src="http://rss.rssad.jp/rss/artimg/DlzMEkU2485N/96229bb6a9c2bcd798f0e6d3a3c9114c"/></p>]]></description> 
    </item> 
  </channel> 
</rss>

コード

channelタグの中のlanguageとimageとitemタグを消します。

import requests
from xml.etree.ElementTree import fromstring, tostring

class Sample(object):
    def req(url):
        r = requests.get(url)
        r.encoding = r.apparent_encoding

        return r

    def del_elem_channel(xml):
        for elem in [children for children in xml]:
            if elem.tag == 'language':
                xml.remove(elem)
            elif elem.tag == 'image':
                xml.remove(elem)
            elif elem.tag == 'item':
                xml.remove(elem)

        return xml

def main():
    res = Sample.req('http://rss.rssad.jp/rss/codezine/new/20/index.xml')
    print(es.text)

    res_xml = fromstring(res.content)
    for channel in res_xml:
        Sample.del_elem_channel(channel)

    print(tostring(res_xml, encoding='unicode', method='xml'))

if __name__ == '__main__':
    main()

結果

 <rss xmlns:ns0="http://www.w3.org/2005/Atom" version="2.0"> 
  <channel> 
    <title>CodeZine:新着一覧</title>  
    <link>http://codezine.jp/</link>  
    <copyright>Copyright 2007-2014 CodeZine, Shoeisha Co., Ltd. All rights reserved.</copyright>  
    <pubDate>Thu, 23 Mar 2017 17:36:49 +0900</pubDate>  
    <description>プログラミングに役立つソースコードが満載な開発者のための実装系Webマガジン</description>  
    <ns0:link href="http://rss.rssad.jp/rss/codezine/new/20/index.xml" rel="self" type="application/rss+xml" />  
    </channel> 
</rss> 
アバター画像

福山

最近技術触れてないかも

目次