広告

Java : DOMImplementation (XML) - API使用例

DOMImplementation (Java SE 17 & JDK 17) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

DOMImplementationインタフェースは、文書オブジェクト・モデルの特定のインスタンスに依存しない操作を実行するためのメソッドをいくつか提供します。

クラス構成

DOMImplementationインタフェースは、主に DocumentType を作成することに使われます。
また、DOM Load and Save(DOMLS) 機能の起点となる DOMImplementationLS を取得することができます。

関連記事:XML (DOM) の基本

共通で使うコード

本記事のAPI使用例では、利便性のために以下の printNode メソッドを共通処理として使います。

// LSSerializer で Node をコンソールに出力します。
private void printNode(DOMImplementation domImpl, Node node) {
    final var feature = domImpl.getFeature("LS", "3.0");
    if (feature instanceof DOMImplementationLS ls) {
        final var serializer = ls.createLSSerializer();
        final var str = serializer.writeToString(node);
        System.out.println(str);
    }
}

使用例です。

final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();

final var domImpl = builder.getDOMImplementation();
final var docType = domImpl.createDocumentType(
        "root", null, "sample.dtd");
System.out.println(docType); // [root: null]

final var document = domImpl.createDocument(null, "root", docType);

//<?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root SYSTEM "sample.dtd">
//<root/>
printNode(domImpl, document);

メソッド

Document createDocument (String namespaceURI, String qualifiedName, DocumentType doctype)

指定された型のDOM Documentオブジェクトとその文書要素を作成します。

final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();

final var domImpl = builder.getDOMImplementation();
final var docType = domImpl.createDocumentType("root", null, "sample.dtd");
System.out.println(docType); // [root: null]

final var document1 = domImpl.createDocument(null, "root", docType);

//<?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root SYSTEM "sample.dtd">
//<root/>
printNode(domImpl, document1);

final var document2 = domImpl.createDocument("ns", "root", null);

//<?xml version="1.0" encoding="UTF-16"?><root xmlns="ns"/>
printNode(domImpl, document2);

DocumentType createDocumentType (String qualifiedName, String publicId, String systemId)

空のDocumentTypeノードを作成します。

final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();

final var docType1 = domImpl.createDocumentType("root", "aaa", "bbb");

// <?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root PUBLIC "aaa" "bbb">
printNode(domImpl, docType1);

final var docType2 = domImpl.createDocumentType("root", "aaa", null);

//  <?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root PUBLIC "aaa">
printNode(domImpl, docType2);

final var docType3 = domImpl.createDocumentType("root", null, "bbb");

// <?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root SYSTEM "bbb">
printNode(domImpl, docType3);

final var docType4 = domImpl.createDocumentType("root", null, null);

// <?xml version="1.0" encoding="UTF-16"?><!DOCTYPE root>
printNode(domImpl, docType4);

Object getFeature (String feature, String version)

このメソッドは、指定した機能とバージョンを持つ特殊な形式のAPIを、DOM Featuresで指定されたとおりに実装する特殊な形式のオブジェクトを返します。

final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var domImpl = builder.getDOMImplementation();

System.out.println(domImpl.hasFeature("LS", "3.0")); // true

final var ret = domImpl.getFeature("LS", "3.0");
System.out.println(ret instanceof DOMImplementationLS); // true

System.out.println(domImpl.hasFeature("LS-Async", "3.0")); // false
System.out.println(domImpl.getFeature("LS-Async", "3.0")); // null

boolean hasFeature (String feature, String version)

DOM実装が特定の機能とバージョンを「DOM Features」で指定されたとおりに実装しているかどうかをテストします。

このメソッドの使用例は、getFeature(String feature, String version) にまとめて記載しました。
そちらのAPI使用例をご参照ください。


関連記事

ページの先頭へ