ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja de ja ja ja ja ja ja fr ja ja ja ja ja ja ja ja en ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja ja vi ja sv eu ja en en hu ja ja en en pl ja ja jbo hbs_lat en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
% sudo apt install -y -V libxml2 % sudo luarocks install xmlua
XMLuaの主な機能を紹介します。 XMLuaを使うとLuaで以下のようなことができます。
HTML、XMLドキュメントのパース/シリアライズ
XMLuaを使ってHTML、XMLを操作するには、まず、xmlua.Documentオブジェクトを作る必要があります。 xmlua.Documentオブジェクトは、以下のように処理対象のHTMLまたは、XMLをパースして、取得します。
-- "xmlua"モジュールの読み込み local xmlua = require("xmlua") local html = [[      Hello       World      ]] -- HTMLをパース local document = xmlua.HTML.parse(html)
パースする対象は、Luaの文字列型に格納されている必要がありますので、ファイルに保存されているHTMLやXMLをパースする場合は、以下のように事前にファイルから読み込んでからパースする必要があります。
-- "xmlua"モジュールの読み込み local xmlua = require("xmlua") local html_file = io.open("test.html") local html = html_file:read("*all") html_file:close() local document = xmlua.HTML.parse(html)
また、以下のようにして、処理したHTML、XMLをxmlua.Documentから元のLuaの文字列に変換することもできます。
-- "xmlua"モジュールの読み込み local xmlua = require("xmlua") local html = [[      Hello       World      ]] -- HTMLをパース local document = xmlua.HTML.parse(html) -- HTMLへシリアライズ print(document:to_html()) --   --   --   --   --  Hello  --   --   --  World  --   --
XPathを使った、要素の検索と属性値の取得
XMLuaは以下のようにXPathを用いて、要素を検索できます。
local xmlua = require("xmlua") local xml = [[    text1   text2   text3    ]] local document = xmlua.XML.parse(xml) --  要素配下の全ての 要素を検索します local all_subs = document:search("/root/sub") -- "#"を使ってマッチしたノードの数を出力できます。 print(#all_subs) -- -> 3 -- "[]"を使って、N番目のノードにアクセスできます。 print(all_subs[1]:to_xml()) -- ->  text1  print(all_subs[2]:to_xml()) -- ->  text2  print(all_subs[3]:to_xml()) -- ->  text3
上記の検索機能を使うことで、スクレイピングしたWebサイトから特定の要素のみを抜き出すことや、特定の要素が含まれるページを検索する等に利用できます。また、以下のように検索した結果に対して、さらに検索できます。
local xmlua = require("xmlua") local xml = [[                 ]] local document = xmlua.XML.parse(xml) -- 全ての 要素を検索 local class_a_subs = document:search("//sub[@class='A']") --  配下の全ての要素を検索 local subsubs_in_class_a = class_a_subs:search("*") print(#subsubs_in_class_a) -- -> 2 -- /root/sub[@class="A"]/subsub1 print(subsubs_in_class_a[1]:to_xml()) --   -- /root/sub[@class="A"]/subsub3 print(subsubs_in_class_a[2]:to_xml()) --
XMLuaには、属性値を取得する機能もあり、スクレイピングしたWebページから特定の要素の属性値を抜き出してまとめて処理するといったこともできます。 属性値の取得は以下のように行います。
local xmlua = require("xmlua") local document = xmlua.XML.parse(" ") local root = document:root() -- ドットを使った属性値の取得 print(root.class) -- -> A -- []を使った属性値の取得 print(root["class"]) -- -> A -- get_attributeメソッドを使った属性値の取得 print(root:get_attribute("class")) -- -> A
マルチスレッドでの使用
XMLuaはマルチスレッドに対応しているため、複数のスレッドから呼び出すことができ、大量のHTMLやXMLを処理する際に効率的に処理することが出来るようになっています。 マルチスレッドで使用するには、幾つかの決まりごとがあるので、マルチスレッドで使用する場合は、XMLua - チュートリアルのマルチスレッドセッションを参照してください。
XMLuaの主な機能を紹介しました。大量にXML・HTMLを操作する必要がある場合の選択肢として、XMLuaを是非使ってみて下さい。
XMLuaの機能についてより詳しく知りたい場合は、XMLua - リファレンスを参照してください。XMLuaの全ての機能の詳細を記載しています。
また、XMLuaをすぐに動かしてみたいという方は、XMLua - チュートリアルを参照してください。ここで紹介した主な機能をすぐに使えるようになるチュートリアルがあります。
開発した成果をフリーソフトウェアで公開するというのは、自社サービスを提供をしてる会社によく見られる光景ですが、クリアコードは自社サービスを持っておらず、このライブラリーは、株式会社セナネットワークス様からの依頼を受けて開発したライブラリーです。つまり受託開発の成果物です。 受託開発の成果物であっても、フリーソフトウェアとして公開することで様々なユーザーがライブラリーを使えます。様々な環境下で使われることにより、いままで発見出来なかったバグを発見出来たり、当初想定されていなかったニーズに気がつけたりして、ライブラリーの品質が高まります。これはお客さんにとってもメリットとなります。
この度、ご依頼主の株式会社セナネットワークス様に上記のようなメリットにご理解をいただき、成果を公開できました。ありがとうございます!
現在クリアコードではソフトウェア開発者を募集しています! フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。
Firefoxのアドオンで、一般的な方法では分からないタブの状態を判別する
FirefoxのアドオンでSVG画像を「色を変えられるアイコン」として使う方法
Apache Arrow
milter manager
ククログの記事はCC BY-SA 4.0とGFDLのデュアルライセンスで自由に利用できます。
クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。
クリアコードは「クリアコードをいい感じにする人」を1名募集しています。
クリアコードはフリーソフトウェア開発で培った技術力を提供しています。特にMozilla製品(Mozilla FirefoxとMozilla Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。