XML、SVG、あと XHTML なんかは、それぞれ異なるデータ形式やマークアップ言語だが、
これらすべてのデータ構造は、DOM(Document Object Model)という共通の概念で扱うことができる。
DOM は、データの構造や内容に関係なく、一貫したインターフェイスを提供するプログラムと文書のための
標準モデルであり、これを使うことで開発者は異なるデータ形式に対して同じ方法でアクセスし、
操作することが可能になる。
次の XML に対して、JavaScript と Java で同じ DOM操作を行うコードを考えてみる。
<?xml version="1.0" encoding="UTF-8"?> <fruits> <fruit id="1"> <name>Apple</name> <color>Red</color> </fruit> <fruit id="2"> <name>Banana</name> <color>Yellow</color> </fruit> </fruits>
以下は JavaScript で xml を制御するコードである
// DOMParserを使用して、XML文字列をDOMオブジェクトに変換 const xmlString = `<上記のXMLデータ>`; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlString, "text/xml"); // 最初のフルーツ要素を取得 const firstFruit = xmlDoc.getElementsByTagName("fruit")[0]; // フルーツの名前を取得 const firstName = firstFruit.getElementsByTagName("name")[0].textContent; console.log("First fruit name: " + firstName); // 新しいフルーツ要素を作成し、fruits要素に追加 const newFruit = xmlDoc.createElement("fruit"); newFruit.setAttribute("id", "3"); const newName = xmlDoc.createElement("name"); newName.textContent = "Orange"; const newColor = xmlDoc.createElement("color"); newColor.textContent = "Orange"; newFruit.appendChild(newName); newFruit.appendChild(newColor); xmlDoc.getElementsByTagName("fruits")[0].appendChild(newFruit);
以下は Java で xml を制御するコードである
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Main { public static void main(String[] args) { try { // XML文字列をDOMオブジェクトに変換 String xmlString = "<上記のXMLデータ>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document xmlDoc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8"))); // 最初のフルーツ要素を取得 NodeList fruitNodes = xmlDoc.getElementsByTagName("fruit"); Node firstFruit = fruitNodes.item(0); // フルーツの名前を取得 NodeList firstNameList = ((Element) firstFruit).getElementsByTagName("name"); String firstName = firstNameList.item(0).getTextContent(); System.out.println("First fruit name: " + firstName); // 新しいフルーツ要素を作成し、fruits要素に追加 Element newFruit = xmlDoc.createElement("fruit"); newFruit.setAttribute("id", "3"); Element newName = xmlDoc.createElement("name"); newName.setTextContent("Orange"); Element newColor = xmlDoc.createElement("color"); newColor.setTextContent("Orange"); newFruit.appendChild(newName); newFruit.appendChild(newColor); xmlDoc.getElementsByTagName("fruits").item(0).appendChild(newFruit); } catch (Exception e) { e.printStackTrace(); } } }
これらのコードは、XMLデータから最初のフルーツ要素を取得し、その名前を表示し、
新しいフルーツ要素を作成して追加する機能を実装している。
両方のコードからJavaScriptとJavaの両方でXMLデータを扱い、DOM操作を行う方法を確認できるだろう。
JavaScriptとJavaでの主な違いは、オブジェクト生成とメソッド呼び出しの方法であり、
JavaScriptでは、DOMParser と createElement を使用して新しいオブジェクトを作成し、
Javaでは DocumentBuilderFactory と DocumentBuilder を使用する。
また、要素の取得や操作に関しても、それぞれ言語に応じたメソッドが提供されている。
この例からも、DOM操作に関しては異なる言語であっても同様のアプローチを取れることが理解できるだろう。
もちろん、今の時代に DOM を意識して操作することが適切なのか?という根本的な話はあるが、
これを理解した上で、それぞれのデータ形式や利用する開発言語、実行環境に合わせた方法を選択すべきだろう。
0 件のコメント:
コメントを投稿