最終更新日: 2025年3月25日

XML (Extensible Markup Language)はデータの保存、設定ファイル、Webサービスに広く使われています。構造化データを扱う開発者にとって、効率の良いXMLパースはとても重要です。今回は、Python、Java、JavaScript用のベストXMLパーサーをそれぞれの言語の例と共に紹介します。
1. PythonでのXMLパース
Pythonは、XMLファイルを解析するための複数のライブラリを提供しており、各ライブラリは異なる用途に適しています。
1.1 xml.etree.ElementTree
(組み込みライブラリ)
xml.etree.ElementTree
は、XMLのパースに適したシンプルで効率的な組み込みモジュールです。
例: XMLファイルのパース
import xml.etree.ElementTree as ET | |
xml_data = """ | |
<data> | |
<item> | |
<name>Book</name> | |
<price>10.99</price> | |
</item> | |
</data> | |
""" | |
root = ET.fromstring(xml_data) | |
for item in root.findall('item'): | |
name = item.find('name').text | |
price = item.find('price').text | |
print(f"Item: {name}, Price: {price}") |
- 利点: 軽量で使いやすい。
- 欠点: 複雑なXML構造には限界がある。
1.2 lxml
(高速・多機能)
lxml
は、libxml2 Cライブラリに基づいた強力なライブラリで、スピードとXPathのサポートを提供します。
例: lxml
でのパース
from lxml import etree | |
xml_data = "<root><element key='value'>Text</element></root>" | |
tree = etree.fromstring(xml_data) | |
print(tree.xpath('//element/@key')) # Output: ['value'] |
- 利点:
ElementTree
よりも高速で、XPathをサポート。 - 欠点: インストールが必要(
pip install lxml
)。
1.3 BeautifulSoup
(ウェブスクレイピングに最適)
BeautifulSoup
は主にHTMLのパースに使用されますが、XMLにも対応しています。
例: BeautifulSoup
でのXMLパース
from bs4 import BeautifulSoup | |
xml_data = "<root><item>Data</item></root>" | |
soup = BeautifulSoup(xml_data, "xml") | |
print(soup.item.text) # Output: Data |
- 利点: 使いやすく、ウェブスクレイピングに最適。
- 欠点:
lxml
よりも遅い。
2. JavaでのXMLパース
Javaは、DOM、SAX、StAXパーサーを含む強力なXMLパースオプションを提供します。
2.1 DOMパーサー (メモリに全XMLを読み込む)
DOMパーサーはXMLツリー全体をメモリに読み込むため、ナビゲートが容易ですが、大きなファイルには非効率です。
例: DOMでのXMLパース
import javax.xml.parsers.*; | |
import org.w3c.dom.*; | |
import java.io.*; | |
public class XMLParser { | |
public static void main(String[] args) throws Exception { | |
File file = new File("data.xml"); | |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | |
DocumentBuilder builder = factory.newDocumentBuilder(); | |
Document doc = builder.parse(file); | |
NodeList items = doc.getElementsByTagName("item"); | |
for (int i = 0; i < items.getLength(); i++) { | |
Element item = (Element) items.item(i); | |
System.out.println("Item: " + item.getTextContent()); | |
} | |
} | |
} |
- 利点: 簡単、小さなXMLファイルに適している。
- 欠点: メモリ使用量が高い。
2.2 SAXパーサー (イベント駆動型・メモリ効率良好)
SAXパーサーはXMLを逐次的に読み込むため、大きなファイルに適しています。
例: SAXでのXMLパース
import javax.xml.parsers.SAXParser; | |
import javax.xml.parsers.SAXParserFactory; | |
import org.xml.sax.*; | |
import org.xml.sax.helpers.DefaultHandler; | |
import java.io.*; | |
class SAXHandler extends DefaultHandler { | |
public void startElement(String uri, String localName, String qName, Attributes attributes) { | |
System.out.println("Element: " + qName); | |
} | |
} | |
public class SAXExample { | |
public static void main(String[] args) throws Exception { | |
SAXParserFactory factory = SAXParserFactory.newInstance(); | |
SAXParser saxParser = factory.newSAXParser(); | |
saxParser.parse(new File("data.xml"), new SAXHandler()); | |
} | |
} |
- 利点: 高速でメモリ使用が少ない。
- 欠点: DOMに比べてナビゲートが難しい。
3. JavaScriptでのXMLパース
JavaScriptにはPythonやJavaのような組み込みのXMLパーサーはありませんが、DOMParserやXMLHttpRequest
を提供しています。
3.1 DOMParser
を使用 (クライアントサイドパース)
DOMParser
はXML文字列をDOMオブジェクトに変換し、操作しやすくします。
例: DOMParser
でのXMLパース
const xmlString = "<root><item>Hello</item></root>"; | |
const parser = new DOMParser(); | |
const xmlDoc = parser.parseFromString(xmlString, "text/xml"); | |
console.log(xmlDoc.getElementsByTagName("item")[0].textContent); | |
// Output: Hello |
- 利点: ブラウザベースのXMLパースに簡単に使用できる。
- 欠点: クライアントサイドのJavaScriptに限定。
3.2 サーバーからのXMLの取得
例: fetch()
を使用してXMLを読み込む
fetch('data.xml') | |
.then(response => response.text()) | |
.then(str => new window.DOMParser().parseFromString(str, "text/xml")) | |
.then(xml => console.log(xml.getElementsByTagName("item")[0].textContent)); |
- 利点: 動的なXMLコンテンツに対応。
- 欠点: サーバーが必要。
結論: 最適なXMLパーサーの選択
言語 | ベストパーサー | 使用ケース |
---|---|---|
Python | ElementTree | シンプルなXMLパース |
Python | lxml | 高速、XPathサポート |
Java | DOMパーサー | 小さなXMLファイル |
Java | SAXパーサー | 大きなXMLファイル |
JavaScript | DOMParser | ブラウザを用いたXML処理 |
各パーサーには、使用ケースに応じた利点があります。小さなXMLファイルを扱う場合、ElementTree
やDOMが適しています。大きなファイルにはSAXやlxmlが最適です。JavaScriptでは、DOMParser
がブラウザ内でのXML処理に最適な選択となります。