JavaのDOM処理を読む
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
*はじめに [#r5c562ef]
JavaでDOM処理を行う場合、
DocumentBuilderFactory factory = DocumentBuilderFactory....
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(xmlFile));
Element elem = (Element)doc.getElementsByTagName(tagName...
のように記述します。SDKドキュメントを見るとDocumentBuilde...
*DocumentBuilderFactory [#red00232]
まずDocumentBuilderFactoryについて見ていきましょう。
newInstance()の動作は[[SDKドキュメント:http://java.sun.co...
では最後のデフォルトのDocumentBuilderFactoryインスタンス...
public static DocumentBuilderFactory newInstance() {
return (DocumentBuilderFactory) FactoryFinder.find(
/* The default property name according to the JAXP s...
"javax.xml.parsers.DocumentBuilderFactory",
/* The fallback implementation class name */
"org.apache.crimson.jaxp.DocumentBuilderFactoryImpl");
}
となっています。つまりcrimsonがデフォルトのDocumentBuilde...
*DocumentBuilderImpl [#k20e1ebe]
ソースを見るとnewDocumentBuilder()の実装は単純に新しいDoc...
xmlReader.parse(is);
return builder.getDocument();
となっており、XMLの読み込みが終わった時点でDOMが構築され...
*Parser2, XmlDocumentBuilder [#lbb40d77]
XMLReaderImpl.parse()を見てみると実際の処理はParser2が行...
contentHandler.startElement(parts[0], parts[1], parts[2]...
です。これによりXmlDocumentBuilderにElementの情報が渡され...
ではElement情報を受け取ったXmlDocumentBuilderが何をしてい...
e = (ElementNode) document.createElementEx(qName);
elementStack[topOfStack++].appendChild(e);
elementStack[topOfStack] = e;
つまりElementが見つかるたびにElementをスタックに積んでい...
コードだけだとイメージがつかみにくいので簡単なXMLで動作を...
<root>
<foo>
<bar>baz</bar>
</foo>
<hoge>huga</hoge>
</root>
こんな感じなXMLがあったとすると、
+elementStack[top] => document
+document.appendChild(root)
+elementStack[top] => root
+root.appendChild(foo)
+elementStack[top] => foo
+foo.appendChild(bar)
+elementStack[top] => bar
+elementStack[top] => foo
+elementStack[top] => root
+root.appendChild(hoge)
+elementStack[top] => hoge
+elementStack[top] => root
+elementStack[top] => document
とスタックが成長していきます。
*ParentNode [#c01d0448]
さて最後にgetElementsByTagName()がどのように実装されてい...
if (factory != null) {
// Ask factory to create appropriate ElementNode subtype
retval = (ElementNode) factory.createElementEx(tagName);
// Set the name of the ElementNode
retval.setTag(tagName);
} else {
retval = new ElementNode(tagName);
}
まあ多分ElementNodeの方が作られてるでしょう。次にElementN...
ParentNode.getElementsByTagName()を見ると内部クラスである...
while (i > lastIndex
&& (node = lastWalker.getNextElement (tag)) != null) {
lastIndex++;
}
lastWalkerはTreeWalkerオブジェクトです。TreeWalker.getNex...
最後に、何故getElementsByTagName()が呼ばれたときにElement...
*おわりに [#h2708946]
今回はJavaのDOM処理の実装を見てみました。これにより実行時...
終了行:
#contents
*はじめに [#r5c562ef]
JavaでDOM処理を行う場合、
DocumentBuilderFactory factory = DocumentBuilderFactory....
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(xmlFile));
Element elem = (Element)doc.getElementsByTagName(tagName...
のように記述します。SDKドキュメントを見るとDocumentBuilde...
*DocumentBuilderFactory [#red00232]
まずDocumentBuilderFactoryについて見ていきましょう。
newInstance()の動作は[[SDKドキュメント:http://java.sun.co...
では最後のデフォルトのDocumentBuilderFactoryインスタンス...
public static DocumentBuilderFactory newInstance() {
return (DocumentBuilderFactory) FactoryFinder.find(
/* The default property name according to the JAXP s...
"javax.xml.parsers.DocumentBuilderFactory",
/* The fallback implementation class name */
"org.apache.crimson.jaxp.DocumentBuilderFactoryImpl");
}
となっています。つまりcrimsonがデフォルトのDocumentBuilde...
*DocumentBuilderImpl [#k20e1ebe]
ソースを見るとnewDocumentBuilder()の実装は単純に新しいDoc...
xmlReader.parse(is);
return builder.getDocument();
となっており、XMLの読み込みが終わった時点でDOMが構築され...
*Parser2, XmlDocumentBuilder [#lbb40d77]
XMLReaderImpl.parse()を見てみると実際の処理はParser2が行...
contentHandler.startElement(parts[0], parts[1], parts[2]...
です。これによりXmlDocumentBuilderにElementの情報が渡され...
ではElement情報を受け取ったXmlDocumentBuilderが何をしてい...
e = (ElementNode) document.createElementEx(qName);
elementStack[topOfStack++].appendChild(e);
elementStack[topOfStack] = e;
つまりElementが見つかるたびにElementをスタックに積んでい...
コードだけだとイメージがつかみにくいので簡単なXMLで動作を...
<root>
<foo>
<bar>baz</bar>
</foo>
<hoge>huga</hoge>
</root>
こんな感じなXMLがあったとすると、
+elementStack[top] => document
+document.appendChild(root)
+elementStack[top] => root
+root.appendChild(foo)
+elementStack[top] => foo
+foo.appendChild(bar)
+elementStack[top] => bar
+elementStack[top] => foo
+elementStack[top] => root
+root.appendChild(hoge)
+elementStack[top] => hoge
+elementStack[top] => root
+elementStack[top] => document
とスタックが成長していきます。
*ParentNode [#c01d0448]
さて最後にgetElementsByTagName()がどのように実装されてい...
if (factory != null) {
// Ask factory to create appropriate ElementNode subtype
retval = (ElementNode) factory.createElementEx(tagName);
// Set the name of the ElementNode
retval.setTag(tagName);
} else {
retval = new ElementNode(tagName);
}
まあ多分ElementNodeの方が作られてるでしょう。次にElementN...
ParentNode.getElementsByTagName()を見ると内部クラスである...
while (i > lastIndex
&& (node = lastWalker.getNextElement (tag)) != null) {
lastIndex++;
}
lastWalkerはTreeWalkerオブジェクトです。TreeWalker.getNex...
最後に、何故getElementsByTagName()が呼ばれたときにElement...
*おわりに [#h2708946]
今回はJavaのDOM処理の実装を見てみました。これにより実行時...
ページ名: