Java에 의해 XML을 구문 분석하는 몇 가지 방법의 요약
첫 번째 유형 : Dom.
DOM의 전체 이름은 문서 개체 모델이며 문서 객체 모델입니다. 응용 프로그램에서 DOM 기반 XML 분석기는 XML 문서를 객체 모델 모음 (일반적으로 DOM 트리라고 함)으로 변환합니다. 응용 프로그램은이 객체 모델의 작업을 통해 XML 문서 데이터의 작동을 구현합니다. DOM 인터페이스를 통해 응용 프로그램은 언제든지 XML 문서의 데이터의 일부에 액세스 할 수 있습니다. 따라서 DOM 인터페이스를 사용한이 메커니즘을 임의의 액세스 메커니즘이라고도합니다.
DOM 인터페이스는 계층 적 객체 모델을 통해 XML 문서 정보에 액세스하는 방법을 제공합니다. 이 계층 적 객체 모델은 XML 문서 구조를 기반으로 노드 트리를 형성합니다. XML 문서에 설명 된 정보의 유형, 심지어 Tabulation 데이터, 프로젝트 목록 또는 문서에 관계없이 DOM을 사용하여 생성 된 모델은 노드 트리 형태입니다. 즉, DOM은 트리 모델을 사용하여 XML 문서의 정보에 액세스하도록 강요합니다. XML은 본질적으로 계층 적 구조 이므로이 설명 방법은 매우 효과적입니다.
DOM 트리가 제공하는 랜덤 액세스 방법은 응용 프로그램 개발에 큰 유연성을 제공하며 전체 XML 문서의 컨텐츠를 임의로 제어 할 수 있습니다. 그러나 DOM 분석기는 전체 XML 문서를 DOM 트리로 변환하여 메모리에 넣기 때문에 문서가 크거나 구조가 비교적 복잡 할 때 메모리 요구 사항이 비교적 높습니다. 또한, 복잡한 구조를 가진 나무를 가로 지르는 것도 시간이 많이 걸리는 작업입니다. 따라서 DOM 분석기는 기계 성능에 대한 요구 사항이 상대적으로 높으며 구현 효율성은 그다지 이상적이지 않습니다. 그러나 DOM 분석기에 의해 채택 된 트리 구조에 대한 아이디어는 XML 문서의 구조와 일치하고 무작위 액세스에 의해 편의를 제공하기 때문에 DOM 분석기는 여전히 광범위한 유용한 값을 가지고 있습니다.
import java.io.file; import javax.xml.parsers.documentBuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; 공개 클래스 domtest1 {public static void main (string [] args)은 예외를 던졌습니다. {// 1 단계 : Dom Parser Factory를 가져옵니다 (작업의 기능은 특정 구문 분석) DocumentBuilDerfactory dbf = DocumentBuilDerfactory.newinstance (); // system.out.println ( "클래스 이름 :" + dbf.getClass (). getName ()); // 2 단계 : 특정 DOM PARSER DOCINEGBUILDER DB = DBF.NEWDOCUMENTBUILDER (); // system.out.println ( "클래스 이름 :" + db.getClass (). getName ()); // step3 : XML 문서를 구문 분석하고 문서 개체 (루트 노드) 문서 문서 = db.parse (새 파일 ( "hublate.xml")); nodelist list = document.getElementsByTagName ( "person"); for (int i = 0; i <list.getLength (); i ++) {element Element = (요소) list.Item (i); 문자열 content = element.getElementsByTagName ( "name"). item (0) .getFirstChild (). getNodeValue (); System.out.println ( "이름 :" + 컨텐츠); content = element.getElementsByTagName ( "주소"). item (0) .getFirstChild (). getNodevalue (); System.out.println ( "주소 :" + 컨텐츠); content = element.getElementsByTagName ( "tel"). item (0) .getFirstChild (). getNodevalue (); System.out.println ( "전화 :" + 컨텐츠); content = element.getEmentsByTagName ( "팩스"). item (0) .getFirstChild (). getNodevalue (); System.out.println ( "팩스 :" + 컨텐츠); content = element.getElementsByTagName ( "이메일"). item (0) .getFirstChild (). getNodeValue (); System.out.println ( "이메일 :" + 컨텐츠); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- import java.io.file; import javax.xml.parsers.documentBuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.attr; import org.w3c.dom.comment; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.namednodemap; import org.w3c.dom.node; import org.w3c.dom.nodelist; / ** * 주어진 XML 문서를 구문 분석하고 명령 줄 */ public class domtest3 {public static void main (String [] args)은 예외 {documentBuilDerfactory dbf = documentBuildermactory.newinstance (); DocumentBuilder db = dbf.newDocumentBuilder (); 문서 doc = db.parse (새 파일 ( "학생 .xml")); // 루트 요소 노드 요소 root = doc.getDocumentElement (); 구문 분석 (루트); } private static void parseelement (요소 요소) {String tagname = element.getNodename (); nodelist children = element.getchildnodes (); System.out.print ( "<" + tagname); // 요소 요소의 모든 속성으로 구성된 이름의 nodemap 객체는 nodemAp map = element.getAttributes ()에 판단해야합니다. // 요소에 if (null! = map) {for (int i = 0; i <map.getLength (); i ++) {// 요소 attr attr = (attr) map.Item (i)의 각 속성을 가져옵니다. 문자열 attrname = attr.getName (); 문자열 attrvalue = attr.getValue (); System.out.print ( "" + attrname + "=/" " + attvalue +"/""); }} system.out.print ( ">"); for (int i = 0; i <children.getLength (); i ++) {node node = children.Item (i); // 노드 유형을 가져옵니다. Short nodetype = node.getNodeType (); if (nodetype == node.element_node) {// 요소입니다. } else if (nodetype == node.text_node) {// 재귀 적으로 exit system.out.print (node.getnodevalue ()); } else if (nodetype == node.comment_node) {system.out.print ( "<!-"); 주석 주석 = (댓글) 노드; // 주석 내용 문자열 data = comment.getData (); System.out.print (데이터); System.out.print ( "->"); }} system.out.print ( "</" + tagname + ">"); }}SAX : SAX의 전체 이름은 XML의 간단한 API이며 XML Simple Application Program 인터페이스입니다. DOM과 달리 SAX가 제공하는 액세스 모드는 순차적 인 모드로 XML 데이터를 빠르게 읽고 쓰는 방법입니다. SAX 분석기를 사용하여 XML 문서를 분석하면 일련의 이벤트가 트리거되고 해당 이벤트 처리 기능이 활성화됩니다. 응용 프로그램은 이러한 이벤트 처리 기능을 통해 XML 문서에 액세스 할 수 있습니다. 따라서 색소폰 인터페이스를 이벤트 중심 인터페이스라고도합니다.
import java.io.file; import javax.xml.parsers.saxparser; import javax.xml.parsers.saxparserfactory; import org.xml.sax.attributes; import org.xml.sax.saxexception; import org.xml.sax.helpers.defaulthandler; public class saxtest1 {public static void main (string [] args)은 예외를 던졌습니다. {// step1 : 색소폰 파서 공장 인스턴스를 얻습니다 saxparserfactory factory = saxparserfactory.newinstance (); // step2 : 색소폰 파서 인스턴스 SaxParser Parser = factory.newsaxparser (); // step3 : start parser.parse (new File ( "Student.xml"), new MyHandler ()); }} class myHandler는 defaulThandler {@override public void startDocument ()를 saxException {System.out.println ( "Parse Start"); } @override public void endDocument ()는 saxException {System.out.println ( "파스 완료"); } @Override public void startElement (String URI, String localName, String Qname, attributes attributes) saxException {system.out.println ( "start element"); } @override public void endlement (String uri, String localName, String Qname) saxException {system.out.println ( "Finish Element"); }} import java.io.file; Java.util.stack 가져 오기; import javax.xml.parsers.saxparser; import javax.xml.parsers.saxparserfactory; import org.xml.sax.attributes; import org.xml.sax.saxexception; import org.xml.sax.helpers.defaulthandler; public class saxtest2 {public static void main (string [] args)은 예외 {saxparserfactory factory = saxparserfactory.newinstance (); saxparser parser = factory.newsaxparser (); parser.parse (새 파일 ( "Student.xml"), New MyHandler2 ()); }} class myHandler2는 defaulthandler {private stack <string> stack = new Stack <string> (); 개인 문자열 이름; 개인 문자열 성별; 개인 문자열 시대; @override public void startlement (String Uri, String localName, String Qname, attributes attributes) saxException {stack.push (qname); for (int i = 0; i <attributes.getLength (); i ++) {String attrname = attributes.getQname (i); 문자열 attrvalue = attributes.getValue (i); System.out.println (attrname + "=" + attvalue); }} @override public void char if ( "name".equals (tag)) {name = new String (ch, start, length); } else if ( "gender".equals (tag)) {gender = new String (ch, start, length); } else if ( "age".equals (tag)) {age = new String (ch, start, length); }} @override public void endlement (String Uri, String localName, String Qname) saxException {stack.pop (); // 요소가 구문 분석되었고 ( "wiching".equals (qname)) {system.out.println ( "name :" + name); System.out.println ( "성별 :" + 성별); System.out.println ( "Age :" + age); System.out.println (); }}}JDOM :
JDOM은 트리 구조를 기반으로 한 오픈 소스 프로젝트이며 순수한 Java 기술을 사용하여 XML 문서에서 구문 분석, 생성, 직렬화 및 다양한 작업을 구현합니다. (http://jdom.org)
• JDOM은 Java 프로그래밍을 직접 제공합니다. 보다 강력한 Java 언어 (메소드 과부하, 컬렉션 개념 등)의 많은 기능을 사용하여 SAX와 DOM의 기능을 효과적으로 결합합니다.
• JDOM은 Java 언어로 XML을 읽고 쓰고 쓰고 작동하는 새로운 API 기능입니다. 이러한 API 기능은 직접성, 단순성 및 효율성의 전제에 따라 최대 최적으로 최적화됩니다.
JDOM은 XML을 만듭니다
import java.io.filewriter; import org.jdom.attribute; import org.jdom.comment; import org.jdom.document; import org.jdom.element; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class jdomtest1 {public static void main (string [] args)은 예외 {document document = new Document (); 요소 루트 = 새 요소 ( "루트"); document.addContent (루트); 댓글 주석 = 새 의견 ( "이것은 내 의견입니다"); root.addContent (댓글); 요소 e = 새 요소 ( "hello"); E.setAttribute ( "Sohu", "www.sohu.com"); root.addContent (e); 요소 e2 = 새로운 요소 ( "세계"); 속성 attr = new 속성 ( "테스트", "hehe"); e2.setattribute (attr); e.addcontent (e2); e2.addContent (새 요소 ( "aaa"). setattribute ( "a", "b") .setattribute ( "x", "y"). setattribute ( "gg", "hh"). settext ( "text content")); format format = format.getPrettyFormat (); 형식 .setIndent ( ""); // format.setencoding ( "gbk"); xmloutputter out = new xmloutputter (형식); out.output (document, new filewriter ( "jdom.xml")); }}JDOM 파싱 XML
import java.io.file; import java.io.fileoutputStream; Java.util.list 가져 오기; import org.jdom.attribute; import org.jdom.document; import org.jdom.element; import org.jdom.input.saxbuilder; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class jdomtest2 {public static void main (String [] args)은 예외 {saxbuilder builder = new SaxBuilder (); 문서 doc = builder.build (새 파일 ( "jdom.xml")); 요소 요소 = doc.getRootElement (); System.out.println (element.getName ()); 요소 hello = element.getchild ( "hello"); System.out.println (hello.getText ()); 목록 목록 = hello.getAttributes (); for (int i = 0; i <list.size (); i ++) {attribute attr = (attribute) list.get (i); 문자열 attrname = attr.getName (); 문자열 attrvalue = attr.getValue (); System.out.println (attrname + "=" + attvalue); } hello.removeChild ( "World"); xmloutputter out = new xmloutputter (format.getPrettyFormat (). setIndent ( "")); out.output (doc, 새 FileOutputStream ( "jdom2.xml")); }}dom4j
import java.io.fileoutputStream; import java.io.filewriter; import org.dom4j.document; import org.dom4j.documenthelper; import org.dom4j.element; import org.dom4j.io.outputformat; import org.dom4j.io.xmlwriter; public class test1 {public static void main (string [] args)은 예외를 던집니다 {// 문서를 작성하고 문서의 루트 요소 노드를 설정하십시오. 첫 번째 방법 // 문서 문서 = documentHelper.createdOcument (); // // 요소 root = documentHelper.createElement ( "학생"); // // document.setRootElement (루트); // 문서를 작성하고 문서의 루트 요소 노드를 설정하십시오. 문서 문서 = DocumentHelper.CreatEdocument (루트); root.addattribute ( "이름", "Zhangsan"); 요소 helloElement = root.addelement ( "Hello"); 요소 월상 = root.addelement ( "World"); HelloElement.settext ( "Hello"); worldelement.settext ( "세계"); HelloElement.addattribute ( "Age", "20"); xmlwriter xmlwriter = new xmlwriter (); xmlwriter.write (문서); outputformat format = new outputformat ( "", true); xmlwriter xmlwriter2 = new xmlwriter (new FileoutPutStream ( "Student2.xml"), 형식); xmlwriter2.write (문서); xmlwriter xmlwriter3 = new xmlwriter (new filewriter ( "Student3.xml"), 형식); xmlwriter3.write (문서); xmlwriter3.close (); }} import java.io.file; import java.util.iterator; Java.util.list 가져 오기; import javax.xml.parsers.documentBuilder; import javax.xml.parsers.documentbuilderfactory; import org.dom4j.document; import org.dom4j.element; import org.dom4j.io.domreader; import org.dom4j.io.saxreader; public class test2 {public static void main (string [] args)은 예외 {saxReader saxReader = new SaxReader (); doc 닥 doc = saxReader.Read (새 파일 ( "Student2.xml")); 요소 root = doc.getRootElement (); System.out.println ( "루트 요소 :" + root.getName ()); childlist = root.elements (); System.out.println (childlist.size ()); childrist2 = root.elements ( "hello"); System.out.println (childlist2.size ()); 요소 first = root.element ( "hello"); System.out.println (First.attributeValue ( "Age")); for (iterator iter = root.elementiterator (); iter.hasnext ();) {element e = (element) iter.next (); System.out.println (e.attributeValue ( "age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuinstance (); d.getRootElement (); import java.io.filewriter; import org.jdom.attribute; import org.jdom.document; import org.jdom.element; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class test3 {public static void main (String [] args)은 예외 {document document = new Document (); 요소 루트 = 새 요소 ( "연락처 목록"). setAttribute (새 속성 ( "회사", "그룹 A")); document.addContent (루트); 요소 contactperson = 새 요소 ( "contact"); root.addContent (ContactPerson); ContactPerson .addContent (새 요소 ( "이름"). SetText ( "Zhang San")) .addContent (새 요소 ( "회사"). SetText ( "Company"))) 요소 ( "street"). setText ( "5th Street")) .addContent (새 요소 ( "City"). setText ( "Shanghai")) .addContent (new Element ( "Province"). setText ( "Shanghai"))); xmloutputter output = new xmloutputter (format.getPrettyFormat () .setIndent ( "). setencoding ("gbk ")); output.output (문서, 새 filewriter ("contact.xml "));}}