DOM作成、解析XMLファイル


すべての近代的なブラウザにはXMLを読み込み、操作する内部のXML解像器があります.解析器はXMLをメモリにロードし、JavaScriptを通じてアクセスできるXML DOMオブジェクトに変換します.
 
解析器はドキュメント全体を読み込んで、このツリー構造をDOMインターフェースを使用して、常駐メモリのツリー構造を構築します.
利点:全体のドキュメントツリーはメモリの中にあり、操作しやすいです.削除、変更、並び替えなど様々な機能をサポートします.
短所:ドキュメント全体をメモリに取り込み(不要なノードを含む)、時間と空間を無駄にします.使用する場合:ドキュメントを解析すると、これらのデータにも複数アクセスする必要があります.ハードウェア資源が十分(メモリ、CPU)
 
Xml文書解析器を生成し、XML構造に対応するツリー構造データをメモリに作成することで、XMLファイル中のデータを簡単に入手することができます.newDocument()を呼び出すとDcumentノードが得られます.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document= builder.newDocument();
 Dcument内容を構築する
Element root = this.document.createElement("employees");
this.document.appendChild(root);
Element employe = this.document.createElement("employe");
Element name = this.document.createElement("name");
name.appendChild(this.document.createTextNode("yues"));
Element age = this.document.createElement("age");
age.appendChild(this.document.createTextNode("26"));
Element sex = this.document.createElement("sex");
sex.appendChild(this.document.createTextNode("Man"));
employe.appendChild(name);
employe.appendChild(age);
employe.appendChild(sex);
root.appendChild(employe);
 Transformerオブジェクトを使ってDockmentノードを一つのXMLファイルに変換します.
TransformerFactory transFactory=TransformerFactory. newInstance()
Transformer transformer=transFactory. newTransformer();
変換されたDockmentオブジェクトを一つのDOMSourceオブジェクトにパッケージ化します.
DOMSource domSource=new DOMSource(document);
変換されたXMLファイルのオブジェクトを一つのStreamResultオブジェクトにパッケージ化します.
File file=new File("newXML.xml");
FileOutputStream out=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(out);
対象transformerがtranformを呼び出して方法を変えます.
transformer.transform(domSource, xmlResult);
Dcumentを変更するための一般的な方法Nodeインターフェースは、Dcumentの親インターフェースであり、ノードを修正、追加、削除するための多くの方法を提供している.Node appedノードは、この方法を呼び出して、現在のノードに新たなサブノードを追加し、この新しいノードに戻すことができる.Node removeChild(Node oldChild)throws DOMExceptionノードは、この方法で指定されたサブノードを削除し、削除されたサブノードに戻るように呼びかけている.Node replacceChildは、サブノードリストの中のサブノードoldChildをnewChildに置換し、oldChildノードに戻る.
解析Xmlドキュメント 
 
public void paserXml(String fileName) {
		// TODO Auto-generated method stub
		try {
			this.document = builder.parse(new FileInputStream(new File(fileName)));
			NodeList employees = document.getChildNodes();
			for(int i=0;i<employees.getLength();i++){
				Node employe = employees.item(i);
				System.out.println(" "+(i+1)+" Employee");
				NodeList employeAttrs = employe.getChildNodes();
				for(int j=0;j<employeAttrs.getLength();j++){
					Node employeAttr = employeAttrs.item(j);
					NodeList attrInfo = employeAttr.getChildNodes();
					for(int k=0;k<attrInfo.getLength();k++){
						Node info = attrInfo.item(k);
						if(info.getNodeType()==Node.ELEMENT_NODE){
							System.out.println(info.getNodeName()+":"+info.getTextContent());
						}
					}
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}