XML은 이제 공통 데이터 교환 형식이되었습니다. 플랫폼 독립적, 언어 독립적이며 시스템 독립적 인 것은 데이터 통합 및 상호 작용에 큰 편의를 제공합니다. XML 자체의 구문 지식 및 기술 세부 사항을 위해서는 관련 기술 문서를 읽어야합니다. 여기에 포함 된 내용에는 DOM (Document Object Model), DTD (문서 유형 정의), 색소폰 (XML 용 간단한 API), XSD (XML Schema Definition), XSLT (확장 가능한 스타일 시트 언어 변환)가 포함됩니다. 자세한 내용은 W3C 공식 웹 사이트 문서 http://www.w3.org를 참조하십시오.
XML 구문 분석 방법은 다른 언어에서 동일하지만 구현 구문은 다릅니다. 두 가지 기본 분석 방법이 있으며, 하나는 색소폰이라고하고 다른 하나는 DOM이라고합니다. SAX는 이벤트 스트림 분석을 기반으로하며 DOM은 XML 문서 트리 구조 분석을 기반으로합니다. XML의 내용과 구조가 다음과 같습니다.
<? xml 버전 = "1.0"encoding = "utf-8"?> <Employee> <name> ddviplinux </name> <sex> m </sex> <에이지> 30 </age> </Employee> </Employee>
이 기사는 Java 언어를 사용하여 DOM 및 SAX의 XML 문서의 생성 및 구문 분석을 구현합니다.
먼저 XML 문서를 정의하고 XML 문서를 정의하고 XML 문서를 설정하고 구문 분석하기위한 인터페이스를 정의하는 XMLDocument를 작동하십시오.
/ **** @author hongliang.dinghl* XML 문서 설정과 구문 분석 사이의 인터페이스 정의*/ public interface xmldocument {/ *** XML 문서 만들기* @Param filename 파일 전체 경로 이름*/ public void createxml (String filename); / *** 구문 분석 XML 문서* @param filename 파일 전체 경로 이름*/ public void parserxml (String filename); } 1. DOM은 XML 문서를 생성하고 구문 분석합니다
XML 문서의 구문 분석 버전의 인터페이스 세트를 정의합니다. 파서는 전체 문서를 읽은 다음 메모리 기수 트리 구조를 작성 한 다음 코드는 DOM 인터페이스를 사용 하여이 트리 구조를 작동 할 수 있습니다. 장점 : 전체 문서 트리가 메모리에 있으며 작동하기 쉽습니다. 삭제, 수정 및 재 배열과 같은 다양한 기능을 지원합니다. 단점 : 전체 문서가 메모리 (쓸모없는 노드 포함)로 전송되어 시간과 공간을 낭비합니다. 사용 중 : 문서가 구문 분석되면이 데이터에 여러 번 액세스해야합니다. 충분한 하드웨어 리소스 (메모리, CPU).
import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputstream; import java.io.printwriter; import javax.xml.parsers.documentBuilder; import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.parserconfigurationException; javax.xml.transform.outputkeys import; import javax.xml.transform.transformer; import javax.xml.transform.transformerconfigurationException; import javax.xml.transform.transformerexception; import javax.xml.transform.transformerFactory; import javax.xml.transform.dom.domsource; import javax.xml.transform.stream.streamresult; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.node; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; / ** * * @author hongliang.dinghl * dom Generation and Parsing XML 문서 */ public class domdemo 구현 xmldocument {개인 문서 문서; 개인 문자열 파일 이름; public void init () {try {DocumentBuilDerfactory factory = documentBuilDerfactory .newinstance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); this.document = builder.newDocument (); } catch (parserconFigurationException e) {System.out.println (e.getMessage ()); }} public void createxml (String filename) {element root = this.document.createElement ( "EmployE ("); this.document.appendChild (루트); 요소 직원 = this.document.createElement ( "Employee"); 요소 이름 = this.document.createElement ( "name"); name.appendChild (this.document.createtextNode ( "Ding Hongliang")); Employee.AppendChild (이름); 요소 섹스 = this.document.createElement ( "섹스"); sex.appendChild (this.document.createtextNode ( "m")); Employee. AppendChild (섹스); 요소 age = this.document.createElement ( "Age"); age.appendChild (this.document.createtextNode ( "30")); Employee. AppendChild (나이); root.appendChild (직원); TransformerFactory tf = transformerFactory.newinstance (); {변압기 변압기 = tf.newtransformer (); domsource source = new domsource (문서); Transformer.setoutPutProperty (outputKeys.Encoding, "GB2312"); Transformer.SetOutputProperty (outputKeys.Indent, "Yes"); printwriter pw = new printwriter (new FileOutputStream (filename)); StreamResult 결과 = New StreamResult (PW); Transformer.Transform (소스, 결과); System.out.println ( "XML 파일 생성을 성공적으로 생성하십시오!"); } catch (transformErconFigurationException e) {System.out.println (e.getMessage ()); } catch (delegalArgumentException e) {system.out.println (e.getMessage ()); } catch (filenotfoundException e) {System.out.println (e.getMessage ()); } catch (transformeRexception e) {System.out.println (e.getMessage ()); }} public void parserxml (String filename) {try {documentBuilDerfactory dbf = documentBuilDerfactory.newinstance (); DocumentBuilder db = dbf.newDocumentBuilder (); 문서 문서 = db.parse (filename); Nodelist 직원 = Document.getChildNodes (); for (int i = 0; i <EmployE.GetLength (); i ++) {node Employee = EmployE.Item (i); Nodelist Employeeinfo = Employee.getChildNodes (); for (int j = 0; nodelist eployEeemeta = node.getChildNodes (); for (int k = 0; k <EmployEemeta.getLength (); k ++) {system.out.println (eployeemeta.item (k) .getnodename () + ":" + Employeemeta.item (k) .getTextContent ()); }}}}}} system.out.println ( "parsermeta.item (k) .getTextContent ());} catch (filenotFoundException e) {system.out.println (e.getMessage ());} catch (parserconfigurationException e) {system.out.out.out.out.out.out.) (parserconfigurationException e) {system.out.println (e.getMessage ()) {System.out.println (e.getMessage ()) {System.out.println (); 2. 색소폰은 XML 문서를 생성하고 구문 분석합니다
DOM 문제를 해결하기 위해 Sax가 나타납니다. 색소폰, 이벤트 중심. 파서가 요소의 시작, 요소의 끝, 문서의 시작 또는 끝 등을 발견하면 이벤트를 보내고 프로그래머는 이러한 이벤트에 응답하기 위해 코드를 작성하고 데이터를 저장합니다. 장점 : 전체 문서를 미리 입력 할 필요가 없으며 리소스가 적습니다. Sax Parser 코드는 Dom Parser 코드보다 작으며 애플릿 및 다운로드에 적합합니다. 단점 : 지속적이지 않습니다. 이벤트 후 데이터가 저장되지 않으면 데이터가 손실됩니다. 무국적; 이벤트에서 텍스트 만 얻을 수 있지만 텍스트가 속한 요소를 모릅니다. 사용법 : 애플릿; XML 문서의 소량의 컨텐츠 만 필요하며 액세스로 돌아가는 경우는 거의 없습니다. 기계 메모리는 낮습니다.
import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioexception; import java.io.inputstream; import javax.xml.parsers.parserconfigurationException; 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; / ** * * @author hongliang.dinghl * 색소폰 문서 구문 분석 */ public class saxdemo emplements xmldocument {public void createxml (String filename) {System.out.println ( "<<"+filename+">>"); } public void parserxml (String filename) {saxparserfactory saxfac = saxparserfactory.newinstance (); {saxparser saxparser = saxfac.newsaxparser (); inputStream은 = new FileInputStream (filename); saxparser.parse (is, new mysaxhandler ()); } catch (parserconFigurationException e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (filenotfoundException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }} class mysaxhandler는 defaulthandler {boolean hasattribute = false; 속성 속성 = null; public void startDocument ()는 saxException {System.out.println ( "문서가 인쇄 시작"); } public void endDocument ()는 saxException {System.out.println ( "문서가 인쇄를 종료했습니다"); } public void startElement (String uri, String localName, String Qname, Attributes 속성) saxException {if (qname.equals ( "EmployE")) {return; } if (qname.equals ( "Employee")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = attributes; hasattribute = true; }} public void endlement (String uri, String localName, String Qname)는 saxException {if (hasattribute && (astributes! = null))) {for (int i = 0; i <attributes.getLength (); i ++) {system.out.println (0)); }}} public void 문자 (char [] ch, int start, int length) saxexception {system.out.println (new String (ch, start, length)); }} 패키지 com.alisoft.facepay.framework.bean; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioexception; import java.io.inputstream; import javax.xml.parsers.parserconfigurationException; 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; / ** * * @author hongliang.dinghl * 색소폰 문서 구문 분석 */ public class saxdemo emplements xmldocument {public void createxml (String filename) {System.out.println ( "<<"+filename+">>"); } public void parserxml (String filename) {saxparserfactory saxfac = saxparserfactory.newinstance (); {saxparser saxparser = saxfac.newsaxparser (); inputStream은 = new FileInputStream (filename); saxparser.parse (is, new mysaxhandler ()); } catch (parserconFigurationException e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (filenotfoundException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }}} class mysaxhandler는 defaulthandler {boolean hasattribute = false; 속성 속성 = null; public void startDocument ()는 saxException {System.out.println ( "문서가 인쇄 시작"); } public void endDocument ()는 saxException {System.out.println ( "문서가 인쇄를 종료했습니다"); } public void startElement (String uri, String localName, String Qname, Attributes 속성) saxException {if (qname.equals ( "EmployE")) {return; } if (qname.equals ( "Employee")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = attributes; hasattribute = true; }} public void endlement (String uri, String localName, String Qname)는 saxException {if (hasattribute && (astributes! = null))) {for (int i = 0; i <attributes.getLength (); i ++) {system.out.println (0)); }}} public void 문자 (char [] ch, int start, int length) saxexception {system.out.println (new String (ch, start, length)); }}3. dom4j는 XML 문서를 생성하고 구문 분석합니다
DOM4J는 매우 우수한 Java XML API로, 우수한 성능, 강력한 기능 및 사용하기 쉽고 오픈 소스 소프트웨어이기도합니다. 요즘에는 점점 더 많은 Java 소프트웨어가 DOM4J를 사용하여 XML을 읽고 쓰고 있음을 알 수 있습니다. Sun의 JAXM조차도 DOM4J를 사용하고 있음을 언급 할 가치가 있습니다.
import java.io.file; import java.io.filewriter; import java.io.ioexception; import java.io.writer; import java.util.iterator; import org.dom4j.document; import org.dom4j.documentException; import org.dom4j.documenthelper; import org.dom4j.element; import org.dom4j.io.saxreader; import org.dom4j.io.xmlwriter; / ** * * @author hongliang.dinghl * dom4j XML 문서 생성 및 XML 문서 */ public class dom4jdemo 구현 xmldocument {public void createxml (String Filename) {document oxach = documentHelper.createdOcument (); 요소 직원 = document.addelement ( "직원"); 요소 직원 = EmployE.AdDelement ( "직원"); 요소 이름 = Employee.addelement ( "이름"); name.settext ( "ddvip"); 요소 섹스 = Employee.addelement ( "섹스"); sex.settext ( "m"); 요소 age = Employee.addelement ( "Age"); age.settext ( "29"); try {Writer filewriter = new filewriter (filename); xmlwriter xmlwriter = new xmlwriter (filewriter); xmlwriter.write (문서); xmlwriter.close (); } catch (ioException e) {System.out.println (e.getMessage ()); }} public void parserxml (String filename) {file inputxml = 새 파일 (filename); SaxReader SaxReader = New SaxReader (); {document document = saxReader.Read (inputxml); 요소 직원 = document.getRootElement (); for (iterator i = EmployE.ElementIterator (); i.HasNext ();) {요소 Employee = (요소) i.next (); for (iterator j = Employee.elementiterator (); System.out.println (node.getName ()+":"+node.getText ()); }}} catch (DocumentException e) {System.out.println (e.getMessage ()); } system.out.println ( "dom4j parserxml"); }}4. JDOM은 XML을 생성하고 구문 분석합니다
DOM 및 SAX의 인코딩 양을 줄이기 위해 JDOM이 나타났습니다. 장점 : 20-80 원칙, 코드 금액을 크게 줄입니다. 사용 시간 : 구문 분석, 생성 등과 같이 구현할 기능은 간단하지만 맨 아래에서 JDOM은 여전히 SAX (가장 일반적으로 사용), DOM 및 XANAN 문서를 사용합니다.
import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.ioexception; Java.util.list 가져 오기; import org.jdom.document; import org.jdom.element; import org.jdom.jdomexception; import org.jdom.input.saxbuilder; import org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * jdom xml 문서 생성 및 구문 분석 * */ public class jdomdemo 구현 xmldocument {public void createxml (String filename) {문서 문서; 요소 루트; 루트 = 새로운 요소 ( "직원"); document = 새 문서 (루트); 요소 직원 = 새로운 요소 ( "직원"); root.addContent (직원); 요소 이름 = 새 요소 ( "이름"); name.settext ( "ddvip"); Employee.addContent (이름); 요소 섹스 = 새로운 요소 ( "섹스"); sex.settext ( "m"); Employee.addContent (섹스); 요소 age = 새로운 요소 ( "Age"); age.settext ( "23"); Employee.addContent (연령); xmloutputter xmlout = new xmloutputter (); try {xmlout.output (document, new fileoutputStream (filename)); } catch (filenotfoundException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }} public void parserxml (String filename) {saxbuilder builder = new SaxBuilder (false); try {document document = builder.build (filename); 요소 직원 = document.getRootElement (); list eployeelist = Employee.getChildren ( "Employee"); for (int i = 0; ielement Employee = (요소) Employeelist.get (i); list EmployeeInfo = Employee.getChildren (); for (int j = 0; jsystem.out.println (((element)) Employeeinfo.get (j)). getName ()+":"+((election)})}; (jdomexception e) {e.printstacktrace ()} catch (e.printstacktrace);위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.