Java : Entity (XML) - API使用例
Entity (Java SE 17 & JDK 17) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
このインタフェースは、XML文書内の解析対象または解析対象外の既知のエンティティを表します。 このインタフェースによってモデル化されるのは、エンティティ宣言ではなくエンティティ自体です。
本記事のAPI使用例では、利便性のために以下の printDocument メソッドを共通処理として使います。
// DocumentをXMLでコンソールに出力します。
// 見やすくするために <?xml ~ ?> は非表示にしています。
public void printDocument(Document document) throws TransformerException {
final var transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
final var result = new StreamResult(new StringWriter());
transformer.transform(new DOMSource(document), result);
System.out.println(result.getWriter());
}
使用例です。
final var path = Path.of("R:", "java-work", "xxx");
System.out.println(path); // R:\java-work\xxx
Files.writeString(path, "yyy");
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa "bbb">
<!ENTITY xxx SYSTEM "file:///R:/java-work/xxx">
]>
<root>
&aaa;
&xxx;
</root>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
//<root>
// bbb
// yyy
//</root>
printDocument(document);
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getSystemId()); // null
}
if (entities.getNamedItem("xxx") instanceof Entity entity) {
System.out.println(entity); // [xxx: null]
System.out.println(entity.getSystemId()); // file:///R:/java-work/xxx
}
関連記事:XML (DOM) の基本
Nodeで宣言されたフィールド
ATTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, DOCUMENT_POSITION_PRECEDING, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE
「Java API 使用例 : Node」をご参照ください。
メソッド
String getInputEncoding ()
エンティティが外部解析対象エンティティである場合は、解析時にこのエンティティに使用されるエンコーディングを指定する属性。
final var path = Path.of("R:", "java-work", "xxx");
System.out.println(path); // R:\java-work\xxx
Files.writeString(path, "yyy");
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa "bbb">
<!ENTITY xxx SYSTEM "file:///R:/java-work/xxx">
]>
<root>
&aaa;
&xxx;
</root>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
//<root>
// bbb
// yyy
//</root>
printDocument(document);
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getInputEncoding()); // null
System.out.println(entity.getSystemId()); // null
}
if (entities.getNamedItem("xxx") instanceof Entity entity) {
System.out.println(entity); // [xxx: null]
System.out.println(entity.getInputEncoding()); // UTF-8
System.out.println(entity.getSystemId()); // file:///R:/java-work/xxx
}
String getNotationName ()
解析対象外エンティティの場合はエンティティの表記法の名前。
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa SYSTEM "bbb" NDATA ccc>
]>
<root/>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getSystemId()); // bbb
System.out.println(entity.getNotationName()); // ccc
}
String getPublicId ()
エンティティに関連する公開識別子(指定されている場合)。指定されていない場合はnull。
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa PUBLIC "bbb" "ccc">
]>
<root/>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getPublicId()); // bbb
System.out.println(entity.getSystemId()); // ccc
}
String getSystemId ()
エンティティに関連するシステム識別子(指定されている場合)。指定されていない場合はnull。
このメソッドの使用例は、getInputEncoding() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
String getXmlEncoding ()
エンティティが外部解析対象エンティティである場合に、テキスト宣言の一部として、このエンティティのエンコーディングを指定する属性。
final var path = Path.of("R:", "java-work", "xxx");
System.out.println(path); // R:\java-work\xxx
Files.writeString(path, """
<?xml version="1.0" encoding="UTF-8"?>\
yyy\
""");
final var xml = """
<!DOCTYPE root [
<!ENTITY aaa "bbb">
<!ENTITY xxx SYSTEM "file:///R:/java-work/xxx">
]>
<root>
&aaa;
&xxx;
</root>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
//<root>
// bbb
// yyy
//</root>
printDocument(document);
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getSystemId()); // null
System.out.println(entity.getXmlVersion()); // null
System.out.println(entity.getXmlEncoding()); // null
}
if (entities.getNamedItem("xxx") instanceof Entity entity) {
System.out.println(entity); // [xxx: null]
System.out.println(entity.getSystemId()); // file:///R:/java-work/xxx
System.out.println(entity.getXmlVersion()); // 1.0
System.out.println(entity.getXmlEncoding()); // UTF-8
}
final var path = Path.of("R:", "java-work", "aaa");
System.out.println(path); // R:\java-work\aaa
Files.writeString(path, """
<?xml version="1.1" encoding="UTF-16"?>\
bbb\
""", StandardCharsets.UTF_16);
final var xml = """
<?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY aaa SYSTEM "file:///R:/java-work/aaa">
]>
<root>
&aaa;
</root>
""";
final var factory = DocumentBuilderFactory.newInstance();
final var builder = factory.newDocumentBuilder();
final var document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
//<root>
// bbb
//</root>
printDocument(document);
final var entities = document.getDoctype().getEntities();
if (entities.getNamedItem("aaa") instanceof Entity entity) {
System.out.println(entity); // [aaa: null]
System.out.println(entity.getSystemId()); // file:///R:/java-work/aaa
System.out.println(entity.getXmlVersion()); // 1.1
System.out.println(entity.getXmlEncoding()); // UTF-16
}
String getXmlVersion ()
エンティティが外部解析対象エンティティである場合に、テキスト宣言の一部として、このエンティティのバージョン番号を指定する属性。
このメソッドの使用例は、getXmlEncoding() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
Nodeで宣言されたメソッド
appendChild, cloneNode, compareDocumentPosition, getAttributes, getBaseURI, getChildNodes, getFeature, getFirstChild, getLastChild, getLocalName, getNamespaceURI, getNextSibling, getNodeName, getNodeType, getNodeValue, getOwnerDocument, getParentNode, getPrefix, getPreviousSibling, getTextContent, getUserData, hasAttributes, hasChildNodes, insertBefore, isDefaultNamespace, isEqualNode, isSameNode, isSupported, lookupNamespaceURI, lookupPrefix, normalize, removeChild, replaceChild, setNodeValue, setPrefix, setTextContent, setUserData
「Java API 使用例 : Node」をご参照ください。