JAVAにおけるXML処理(一)JAXPによるXML操作
1.JAVA処理XMLのファイルインタフェース
XMLデータファイル操作のインタフェースには,現在2種類の規格:DOM&SAXが存在する.DOMはxmlデータファイルを全体として処理し,SAXはXMLをデータストリームとして処理する.
上記2種類の規格の他にも、JDOM、DOM 4 Jなど、非規格のXML操作インタフェースが多数存在する.これらのインタフェースまたはモジュールは標準的なDOMと互換性がないが,その使いやすさのためjava開発グループにおいて非常に広範な応用がある.
1.1 DOM規格
DOMはXMLデータファイルを操作する最も広範な標準であり、特定の言語とプラットフォームとは独立している.多くのXML解析器はDOMインタフェース規格を実現している.DOM標準の最も基本的な考え方は、XMLデータファイル全体をメモリにロードし、ツリーオブジェクトに解析することです.したがって、DOMベースのプロセッサはメモリ要件が高いが、速度が速い.
DOM標準はW 3 Cが維持し、http://www.w3c.orgネット上に最新のDOM標準規範ファイルがある.
1.2 SAX標準
この基準は、一部のデータを読み、一部のデータを処理することです.このインタフェースは、通常、XMLデータファイル内の異なるコンテンツを異なるオブジェクトに分類する時間ベースである.SAXプロセッサが異なるオブジェクトを解析すると、異なるイベントが発生し、異なるイベントプロセッサが呼び出されます.
1.3 JAXP仕様
JAXPはSUN社が提案したJAVA操作XMLの標準である.JAXPの役割は、JAVAアプリケーションと特定の解析器との間に統合されたプログラミングインターフェースを提供し、JAVAアプリケーションの移植性を向上させることです.JAXPはJAVAアプリケーションがDOMまたはSAXインタフェースを取得する方法を規範化しただけで、JAVAアプリケーションがXML解析器をロードする方法を規範化した.JAXP自体はJAVAのインタフェースフレームワークにすぎません.
2、JAXPでXMLを操作する
2.1 JAXPによるXMLのDOM操作
以上、JDK独自のXerces解析器を使用していますが、結果プログラムとしてXercesに関連するコードは一切ありません.これはJAXPモジュールの最大の利点です.具体的なXML解析器の呼び出しの詳細を隠し、ユーザーコードを特定の解析器から独立させ、異なる解析器間で切り替えることができます.
2.2 JAXPによるXMLのSAX操作
XMLデータファイル操作のインタフェースには,現在2種類の規格:DOM&SAXが存在する.DOMはxmlデータファイルを全体として処理し,SAXはXMLをデータストリームとして処理する.
上記2種類の規格の他にも、JDOM、DOM 4 Jなど、非規格のXML操作インタフェースが多数存在する.これらのインタフェースまたはモジュールは標準的なDOMと互換性がないが,その使いやすさのためjava開発グループにおいて非常に広範な応用がある.
1.1 DOM規格
DOMはXMLデータファイルを操作する最も広範な標準であり、特定の言語とプラットフォームとは独立している.多くのXML解析器はDOMインタフェース規格を実現している.DOM標準の最も基本的な考え方は、XMLデータファイル全体をメモリにロードし、ツリーオブジェクトに解析することです.したがって、DOMベースのプロセッサはメモリ要件が高いが、速度が速い.
DOM標準はW 3 Cが維持し、http://www.w3c.orgネット上に最新のDOM標準規範ファイルがある.
1.2 SAX標準
この基準は、一部のデータを読み、一部のデータを処理することです.このインタフェースは、通常、XMLデータファイル内の異なるコンテンツを異なるオブジェクトに分類する時間ベースである.SAXプロセッサが異なるオブジェクトを解析すると、異なるイベントが発生し、異なるイベントプロセッサが呼び出されます.
1.3 JAXP仕様
JAXPはSUN社が提案したJAVA操作XMLの標準である.JAXPの役割は、JAVAアプリケーションと特定の解析器との間に統合されたプログラミングインターフェースを提供し、JAVAアプリケーションの移植性を向上させることです.JAXPはJAVAアプリケーションがDOMまたはSAXインタフェースを取得する方法を規範化しただけで、JAVAアプリケーションがXML解析器をロードする方法を規範化した.JAXP自体はJAVAのインタフェースフレームワークにすぎません.
2、JAXPでXMLを操作する
2.1 JAXPによるXMLのDOM操作
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import java.io.*;
public class Test {
public static void main(String args[]) {
try{
String path = "xml";
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
//
domFactory.setValidating(false);
//
domFactory.setNamespaceAware(true);
// DocumentBuilder
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
// DocumentBuilder XML DOM Document
Document document = domBuilder.parse(new File(path));
// ( )
Node mynode = document.getFirstChild();
int nodeType = mynode.getNodeType();
String nodeName = mynode.getNodeName();
String nodeValue = mynode.getNodeValue();
System.out.println(nodeType);
System.out.println(nodeName);
System.out.println(nodeValue);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
以上、JDK独自のXerces解析器を使用していますが、結果プログラムとしてXercesに関連するコードは一切ありません.これはJAXPモジュールの最大の利点です.具体的なXML解析器の呼び出しの詳細を隠し、ユーザーコードを特定の解析器から独立させ、異なる解析器間で切り替えることができます.
2.2 JAXPによるXMLのSAX操作
import java.io.IOException;
import javax.xml.parsers.*;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* date 12008-12-16
* SAX XML
* ,
*
*/
public class SAXtoMyxml {
public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException {
// SAX
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sax = sf.newSAXParser();
//
// xml
sax.parse("myxml1.xml", new SAXHander()); //
}
}
// sax
class SAXHander extends DefaultHandler {
public void startDocument() throws SAXException {
System.out.println(" ");
}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(" "+qName);
}
public void characters(char[] ch, int start, int length) throws SAXException {
String text = new String(ch,start,length);
// xml
if(text.trim().equals("")) {
return;
}
System.out.println(" "+text);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println(" "+qName);
}
public void endDocument() throws SAXException {
System.out.println(" ");
}
}