public class hiDom extends Object
DOM(Document/Element)の取り扱いを簡便化します。
Nodeは隠蔽しています。
ElementのリストはArrayList<Element>としています。
DOM関連で必要なimportは次のものです。
// DOM関連 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.*;
Dom(Document/Element)のインターフェースも用い次のようなアクセスができます。
import otsu.hiNote.*;
import java.util.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Test {
   public static void main(String[] args_){
      try{
         Document doc = hiDom.readXMLfile("data.xml"); 
         chkElm(doc.getDocumentElement());
         }
      catch(Exception e){
         e.printStackTrace(hiU.err);
         System.exit(1);
         }
      }
   static void chkElm(Element element){
      ArrayList<Element> elms=hiDom.getChildElements(element);
      for(Element elm:elms){
         if(hiDom.isTextElement(elm)){
            System.out.println(elm.getTagName()+":"
                               +hiDom.getText(elm));
            }
         else{
            System.out.println(elm.getTagName());
            chkElm(elm);
            }
         }
      }
   }
| 修飾子とタイプ | フィールドと説明 | 
|---|---|
| static boolean | indent | 
| 修飾子とタイプ | メソッドと説明 | 
|---|---|
| static Element | appendElement(Document doc,
             Element elm,
             String name)Elementに指定タグ名のElementを追加する. | 
| static Element | appendElement(Document doc,
             String name)Documentに指定タグ名のElementを追加する. | 
| static Element | appendElement(Element to_,
             Element elm_)他Documentからのelementを取り込む。 | 
| static Element | appendElement(Element elm,
             String name)Elementに指定タグ名のElementを追加する. | 
| static Element | appendTextElement(Document doc,
                 Element elm,
                 String name,
                 String text)Elementに指定タグ名のテキストElementを追加する. | 
| static Element | appendTextElement(Element elm,
                 String name,
                 String text)Elementに指定タグ名のテキストElementを追加する. | 
| static HashMap<String,String> | getAttributes(Element elm_)Elementの全attributeを取得する。 | 
| static ArrayList<Element> | getChildElements(Element elm)子Elementのリストを取得する. | 
| static Element | getChildTaggedElement(Element elm,
                     String tag)指定TagのElement1個を取得する. | 
| static ArrayList<Element> | getChildTaggedElements(Element elm,
                      String tag)指定TagのElementリストを取得する. | 
| static Element | getFirstChildElement(Element elm) | 
| static Element | getTaggedElement(Element elm,
                String tag)指定TagのElementを取得する. | 
| static ArrayList<Element> | getTaggedElements(Element elm,
                 String tag)指定TagのElementリストを取得する. | 
| static String | getText(Element elm)テキスト部を得る. | 
| static boolean | isTextElement(Element elm)子要素がテキストか調べる. | 
| static Document | newDocument()新規DOM(Document)を作成する. | 
| static void | print(Node node_,
     OutputStream wrt_)DocumentまたはElementを印字する. | 
| static void | print(Node node_,
     OutputStream outs_,
     String charSet_)DocumentまたはElementを印字する. | 
| static void | print(Node node_,
     Writer wrt_)DocumentまたはElementを印字する. | 
| static void | print(Node node_,
     Writer wrt_,
     String charSet_)DocumentまたはElementを印字する. | 
| static String | printDom(Document doc_) | 
| static void | printDom(Document doc_,
        OutputStream wrt_) | 
| static void | printDom(Document doc_,
        OutputStream outs_,
        String charSet_) | 
| static String | printDom(Document doc_,
        String charSet_) | 
| static void | printDom(Document doc_,
        Writer wrt_) | 
| static void | printDom(Document doc_,
        Writer wrt_,
        String charSet_) | 
| static Document | readXMLfile(File file_)指定名のXMLファイルを読みDOM(Document)を得る | 
| static Document | readXMLfile(String fileName_)指定名のXMLファイルを読みDOM(Document)を得る
次の作業に相当します。 | 
| static Document | readXMLsource(InputSource is_)指定名の入力ソースを読みDOM(Document)を得る. | 
| static Document | readXMLstream(InputStream is_)指定名の入力ストリームを読みDOM(Document)を得る. | 
| static Document | readXMLtext(String text_)XML-Text読みDOM(Document)を得る. | 
| static void | setAttributes(Element elm_,
             HashMap<String,String> attrs_)Elementに複数のattributeを設定する | 
| static String | toString(Node node_)DocumentまたはElementを文字列にする. | 
| static String | toString(Node node_,
        String charSet_)文字列にする. | 
public static Document readXMLfile(String fileName_)
次の作業に相当します。
--- DocumentBuilderFactory dfact =DocumentBuilderFactory.newInstance(); DocumentBuilder builder=dfact.newDocumentBuilder(); Document doc =builder.parse(new File(fileName_));
fileName_ - XMLファイル名public static Document readXMLfile(File file_)
file_ - XMLファイルpublic static Document readXMLstream(InputStream is_)
is_ - 入力ストリームpublic static Document readXMLsource(InputSource is_)
InputSourceを使えばStringに入れたXMLの解析などもできます。
//import org.xml.sax.InputSource; String text;// ここにXMLデータがあるとする StringReader rd = new StringReader(text); InputSource is = new InputSource(rd); Document doc= hiDom.readXMLsource(is);
is_ - 入力ストリームpublic static Document readXMLtext(String text_)
text_ - 読み込む長文Stringpublic static Document newDocument()
次の作業に相当します。
DocumentBuilderFactory _dfact =DocumentBuilderFactory.newInstance(); DocumentBuilder _builder=_dfact.newDocumentBuilder(); Document doc =_builder.newDocument();root-elementはhiDom.appendElement()を用いて次のように生成します。
Document doc = hiDom.newDocument(); Element root= hiDom.appendElement(doc,"root");
public static void printDom(Document doc_, OutputStream outs_, String charSet_)
public static void printDom(Document doc_, OutputStream wrt_)
public static String toString(Node node_, String charSet_)
node_ - DocumentまたはElementcharSet_ - 文字セットpublic static String toString(Node node_)
node_ - DocumentまたはElementpublic static void print(Node node_, Writer wrt_, String charSet_)
node_ - DocumentまたはElementwrt_ - 出力するWritercharSet_ - 文字セット;nullを指定するとシステム標準public static void print(Node node_, Writer wrt_)
node_ - DocumentまたはElementwrt_ - 出力するWriterpublic static void print(Node node_, OutputStream outs_, String charSet_)
node_ - DocumentまたはElementouts_ - 出力するストリームcharSet_ - 文字セット(utf-8,shift-jisなど);nullを指定するとシステム標準public static void print(Node node_, OutputStream wrt_)
node_ - DocumentまたはElementwrt_ - 出力するWriterpublic static ArrayList<Element> getChildTaggedElements(Element elm, String tag)
指定要素の直接の子Elementの中で指定タグのものを得ます。
elm - 基準Elementtag - タグpublic static Element getChildTaggedElement(Element elm, String tag)
指定要素の直接の子Elementの中で指定タグのもの内最初に見つけた1個を得ます。
elm - 基準Elementtag - タグpublic static ArrayList<Element> getTaggedElements(Element elm, String tag)
指定Elementの子孫Elementで、指定名のタグを持つものを検索します。
Documentから検索するにはDocument.getDocumentElement()で主Element
を取得して引数とします。
  // Document doc;
  ArrayList<Element> _elms= hiDom.getChildTaggedElements(
                                  doc.getDocumentElement()
                                 ,"タグ");
elm - 基準Elementtag - タグpublic static Element getTaggedElement(Element elm, String tag)
指定Elementの子孫Elementで、指定名のタグを持つものを検索します。
Documentから検索するにはDocument.getDocumentElement()で主Element
を取得して引数とします。
  // Document doc;
  ArrayList<Element> _elms= hiDom.getChildTaggedElements(
                                  doc.getDocumentElement()
                                 ,"タグ");
elm - 基準Elementtag - タグpublic static String getText(Element elm)
子nodeがTEXT,CDATA-SECTIONの場合、
文字列部を取得します。
それ以外の場合は空の文字列が戻ります。
elm - テキスト部を得るElementpublic static boolean isTextElement(Element elm)
子nodeがTEXT,CDATA-SECTIONか調べます。
elm - テキスト部を得るElementpublic static ArrayList<Element> getChildElements(Element elm)
elm - 基準Elementpublic static Element appendElement(Document doc, String name)
次の作業に相当します。
--- Element elm= doc.createElement(name); doc.appendChild(elm); //return elm;
doc - このDocumentに追加されるname - 追加するElementの名前public static Element appendElement(Element elm, String name)
次の作業に相当します。
---
  Document doc= elm.getOwnerDocument();
  if( doc==null ){
     throw new Exception("can't get owner-document");
     }
  Element ee= doc.createElement(name);
  elm.appendChild(ee);
  //return  ee;
elm - このElementに追加されるname - 追加するElementの名前public static Element appendTextElement(Element elm, String name, String text)
テキストElementを追加します。テキストにはHTMLエスケープ
が施されます。
次の作業に相当します。
---
  Document doc= elm.getOwnerDocument();
  if( doc==null ){
     throw new Exception("can't get owner-document");
     }
  Element ee= doc.createElement(name);
  ee.appendChild(doc.createTextNode(text));
  elm.appendChild(ee);
  //return ee;
elm - このElementに追加されるname - 追加するテキストElementの名前text - 追加するテキストpublic static Element appendElement(Document doc, Element elm, String name)
次の作業に相当します。
--- Element ee= doc.createElement(name); elm.appendChild(ee); //return ee;
doc - documentelm - このElementに追加されるname - 追加するElementの名前public static Element appendTextElement(Document doc, Element elm, String name, String text)
テキストElementを追加します。テキストにはHTMLエスケープ
が施されます。
次の作業に相当します。
--- Element ee= doc.createElement(name); ee.appendChild(doc.createTextNode(text)); elm.appendChild(ee); //return ee;
doc - documentelm - このElementに追加されるname - 追加するテキストElementの名前text - 追加するテキストpublic static HashMap<String,String> getAttributes(Element elm_)
次の操作に相当します。
   HashMap<String,String> attrs    = new HashMap<String,String>();
   NamedNodeMap           _attList = elm_.getAttributes();
   for (int i=0; i<_attList.getLength(); i++) {
      Attr _att = (Attr)_attList.item(i);
      attrs.put(_att.getName(),_att.getValue());
      }
elm_ - Elementpublic static void setAttributes(Element elm_, HashMap<String,String> attrs_)
elm_ - Elementattrs_ - attributeセット、キーはattribute名