매우 편리합니다. XML 자체에 대한 문법적 지식과 기술적 세부 사항을 보려면 DOM(Document Object Model), DTD(Document Type Definition), SAX(Simple API for XML), XSD(Xml Schema Definition)를 포함하는 관련 기술 문헌을 읽어야 합니다. , XSLT(Extensible Stylesheet Language Transformations)에 대한 자세한 내용은 w3c 공식 웹사이트 설명서를 참조하세요.
XML은 다른 언어에서도 동일한 방식으로 구문 분석되지만 구현되는 구문은 다릅니다. 두 가지 기본 구문 분석 방법이 있는데, 하나는 SAX이고 다른 하나는 DOM입니다. SAX는 이벤트 스트림 구문 분석을 기반으로 하고 DOM은 XML 문서 트리 구조 구문 분석을 기반으로 합니다. XML의 내용과 구조가 다음과 같다고 가정합니다.
<?xml version="1.0" encoding="UTF-8"?><employees><employee> <name>ddviplinux</name> <sex>m</sex> <age>30</age></employee></employees>
이 기사에서는 JAVA 언어를 사용하여 DOM 및 SAX XML 문서의 생성 및 구문 분석을 구현합니다.
먼저 XML 문서를 운영하기 위한 인터페이스인 XmlDocument를 정의합니다. XML 문서를 생성하고 파싱하기 위한 인터페이스를 정의합니다.
package com.beyond.framework.bean; /** * @author zhengwei * 定义XML文档建立与解析的接口 */ public interface XmlDocument { /** * 建立XML文档 * @param fileName 文件全路径名称 */ public void createXml(String fileName); /** * 解析XML文档 * @param fileName 文件全路径名称 */ public void parserXml(String fileName); }
1. DOMXML 문서 생성 및 구문 분석
XML 문서의 구문 분석된 버전에 대한 인터페이스 세트를 정의합니다. 파서는 전체 문서를 읽고 코드가 DOM 인터페이스를 사용하여 조작할 수 있는 메모리 상주 트리 구조를 구축합니다.
장점: 전체 문서 트리가 메모리에 있으며, 삭제, 수정, 재배치 및 기타 기능을 지원합니다.
단점: 전체 문서를 메모리로 전송하는 것은 시간과 공간 낭비입니다.
사용 상황: 문서가 구문 분석되면 데이터에 여러 번 액세스해야 하며 하드웨어 리소스(메모리, CPU)가 충분합니다.DomDemo ==.document = = .document.createElement("employees"= .document.createElement("employee"= .document.createElement("name".document.createTextNode("丁宏亮"= .document.createElement("sex".document.createTextNode("m"= .document.createElement("age".document.createTextNode("30"=== "gb2312""yes"= PrintWriter(= "生成XML文件成功!" ==== ( i = 0; i < employees.getLength(); i++== ( j = 0; j < employeeInfo.getLength(); j++== ( k = 0; k < employeeMeta.getLength(); k+++ ":" +"解析完毕"
2. SAXXML 문서 생성 및 구문 분석
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 zhengwei * SAX文档解析*/public class SaxDemo implements XmlDocument { public void createXml(String fileName) { System.out.println("<<"+filename+">>"); } public void parserXml(String fileName) { SAXParserFactory saxfac = SAXParserFactory.newInstance(); try { SAXParser saxparser = saxfac.newSAXParser(); InputStream is = 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 extends DefaultHandler { boolean hasAttribute = false; Attributes attributes = null; public void startDocument() throws SAXException { System.out.println("文档开始打印了"); } public void endDocument() throws SAXException { System.out.println("文档打印结束了"); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("employees")) { return; } if (qName.equals("employee")) { System.out.println(qName); } if (attributes.getLength() > 0) { this.attributes = attributes; this.hasAttribute = true; } } public void endElement(String uri, String localName, String qName) throws SAXException { if (hasAttribute && (attributes != null)) { for (int i = 0; i < attributes.getLength(); i++) { System.out.println(attributes.getQName(0) + attributes.getValue(0)); } } } public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(new String(ch, start, length)); } }
XML 문서 생성 및 구문 분석 Java XML API,
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 zhengwei
* Dom4j 生成XML文档与解析XML文档
*/ public class Dom4jDemo implements XmlDocument { public void createXml(String fileName) {
Document document = DocumentHelper.createDocument();
Element employees=document.addElement("employees");
Element employee=employees.addElement("employee");
Element name= employee.addElement("name");
name.setText("ddvip");
Element sex=employee.addElement("sex");
sex.setText("m");
Element age=employee.addElement("age");
age.setText("29"); try {
Writer fileWriter=new FileWriter(fileName);
XMLWriter xmlWriter=new XMLWriter(fileWriter);
xmlWriter.write(document);
xmlWriter.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
} public void parserXml(String fileName) {
File inputXml=new File(fileName);
SAXReader saxReader = new SAXReader(); try {
Document document = saxReader.read(inputXml);
Element employees=document.getRootElement(); for(Iterator i = employees.elementIterator(); i.hasNext();){
Element employee = (Element) i.next();for(Iterator j = employee.elementIterator(); j.hasNext();){
Element node=(Element) j.next();
System.out.println(node.getName()+":"+node.getText());
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
System.out.println("dom4j parserXml");
}
}
4. JDOMXML 생성 및 구문 분석
장점: 20-80 원칙은 코드 양을 크게 줄입니다. 사용 사례: 구현되는 기능은 구문 분석, 생성 등 간단하지만, 최하위 수준에서 JDOM은 여전히 SAX(가장 일반적으로 사용되는), DOM 및 Xanan 문서를 사용합니다.
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import 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 zhengwei * JDOM 生成与解析XML文档 */ public class JDomDemo implements XmlDocument { public void createXml(String fileName) { Document document; Element root; root=new Element("employees"); document=new Document(root); Element employee=new Element("employee"); root.addContent(employee); Element name=new Element("name"); name.setText("ddvip"); employee.addContent(name); Element sex=new Element("sex"); sex.setText("m"); employee.addContent(sex); Element age=new Element("age"); age.setText("23"); employee.addContent(age); 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); Element employees=document.getRootElement(); List employeeList=employees.getChildren("employee"); for(int i=0;i<EMPLOYEELIST.SIZE();I++){ iElement employee=(Element)employeeList.get(i); List employeeInfo=employee.getChildren(); for(int j=0;j<EMPLOYEEINFO.SIZE();J++){ System.out.println(((Element)employeeInfo.get(j)).getName()+":" +((Element)employeeInfo.get(j)).getValue()) } } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
5. dom4j를 사용하여 XML 구문 분석
dom4j은 XML 문서 구문 분석을 위한 오픈 소스 XML 프레임워크입니다. 이 기사에서는 dom4j에 포함된 파서를 사용하여 XML 문서를 생성하고 수정하는 방법을 설명합니다.
dom4j API에는 XML 문서를 구문 분석하는 도구가 포함되어 있습니다. 이 파서는 이 기사에서 샘플 XML 문서를 생성하는 데 사용됩니다.목록 1.
예제 XML
수정된 XML 문서(catalog-modified.xml)
<?xml version="1.0" encoding="UTF-8"?> <catalog> <!--An XML Catalog--> <?target instruction?><journal title="XML Zone" publisher="IBM developerWorks"> <article level="Intermediate" date="December-2001"> <title>Java configuration with XML Schema</title> <author> <firstname>Marcello</firstname> <lastname>Vitaletti</lastname> </author> </article></journal> </catalog>
Presets 문서 만들기 문서 수정 Presets 이 파서는 에서 얻을 수 있습니다. dom4j 클래스, XPath 엔진, SAX 및 DOM 인터페이스를 포함하는 클래스 경로에서 dom4j-1.4/dom4j-full.jar에 액세스할 수 있도록 만듭니다. JAXP 파서에 포함된 SAX 및 DOM 인터페이스를 이미 사용하고 있는 경우 클래스 경로에 dom4j-1.4/dom4j.jar을 추가하세요. dom4j.jar에는 dom4j 클래스와 XPath 엔진이 포함되어 있지만 SAX 및 DOM 인터페이스는 포함되어 있지 않습니다. 문서 만들기 이 섹션에서는 dom4j API를 사용하여 XML 문서를 만드는 과정을 설명하고 샘플 XML 문서 Catalog.xml을 만듭니다. import 문을 사용하여 dom4j API 클래스를 가져옵니다. import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; DocumentHelper 클래스를 사용하여 문서 인스턴스를 만듭니다. DocumentHelper는 XML 문서 노드를 생성하는 dom4j API 팩토리 클래스입니다. 루트 요소 카탈로그를 생성하려면 addElement() 메소드를 사용하십시오. addElement()는 XML 문서에 요소를 추가하는 데 사용됩니다. Element CatalogElement = document.addElement("catalog"); addComment() 메서드를 사용하여 카탈로그 요소에 "XML 카탈로그"라는 주석을 추가합니다. CatalogElement.addComment ("XML 카탈로그"); 저널 요소를 추가하려면 카탈로그 요소에서 addElement() 메소드를 사용하십시오. 저널 요소에 제목 및 출판사 속성을 추가하려면 addAttribute() 메소드를 사용하십시오. journalElement.addAttribute("publisher", "IBM DeveloperWorks") 可以使用 addDocType()方法添加文档类型说明。 document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd"); 这样就向 XML 文档中增加文档类型说明: 如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。 XML 声明 自动添加到 XML 文档中。 清单 3 所示的例子程序 XmlDom4J.java 用于创建 XML 文档 catalog.xml。 清单 3. 生成 XML 文档 catalog.xml 的程序(XmlDom4J.java) 这一节讨论了创建 XML 文档的过程,下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。 修改文档 这一节说明如何使用 dom4j API 修改示例 XML 文档 catalog.xml。 使用 SAXReader 解析 XML 文档 catalog.xml: SAXReader 包含在 org.dom4j.io 包中。 inputXml 是从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。 获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。 通过和 title 元素类似的过程修改 author 元素。 清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。 清单 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java) 结束语:包含在 dom4j 中的解析器是一种用于解析 XML 文档的非验证性工具,可以与JAXP、Crimson 或 Xerces 集成。本文说明了如何使用该解析器创建和修改 XML 文档。
journalElement.addAttribute("title", "XML Zone");
articleElement.addAttribute("date", "December-2001");
articleElement.addAttribute("level", "Intermediate"); 을 기사 요소에 추가 제목 요소를 추가합니다. 기사 요소의 텍스트를 설정하려면 setText() 메소드를 사용하십시오. 기사 요소에 작성자 요소를 추가합니다. 작성자 요소에 이름 요소를 추가하고 요소의 텍스트를 설정합니다. 작성자 요소 요소에 성을 추가하고 요소 텍스트를 설정합니다.
lastNameElement.setText("Vitaletti");
Element lastNameElement=authorElement.addElement("성");
import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter;import java.io.*;public class XmlDom4J{public void generateDocument(){
Document document = DocumentHelper.createDocument();
Element catalogElement = document.addElement("catalog");
catalogElement.addComment("An XML Catalog");
catalogElement.addProcessingInstruction("target","text");
Element journalElement = catalogElement.addElement("journal");
journalElement.addAttribute("title", "XML Zone");
journalElement.addAttribute("publisher", "IBM developerWorks");
Element articleElement=journalElement.addElement("article");
articleElement.addAttribute("level", "Intermediate");
articleElement.addAttribute("date", "December-2001");
Element titleElement=articleElement.addElement("title");
titleElement.setText("Java configuration with XML Schema");
Element authorElement=articleElement.addElement("author");
Element firstNameElement=authorElement.addElement("firstname");
firstNameElement.setText("Marcello");
Element lastNameElement=authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
document.addDocType("catalog",null,"file://c:/Dtds/catalog.dtd");try{
XMLWriter output = new XMLWriter( new FileWriter(new File("c:/catalog/catalog.xml")));
output.write( document );
output.close();
} catch(IOException e){
System.out.println(e.getMessage());
}
}public static void main(String[] argv){
XmlDom4J dom4j=new XmlDom4J();
dom4j.generateDocument();
}
}
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
List list = document.selectNodes("//article/@level" );
Iterator iter=list.iterator(); while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next(); if(attribute.getValue().equals("Intermediate"))
attribute.setValue("Introductory");
}
list = document.selectNodes("//article" );
iter=list.iterator(); while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("title"); while(iterator.hasNext()){
Element titleElement=(Element)iterator.next(); if(titleElement.getText().equals("Java configuration with XML Schema"))
titleElement.setText("Create flexible and extensible XML schema");
}
}
import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.Attribute;import java.util.List;import java.util.Iterator;import org.dom4j.io.XMLWriter;import java.io.*;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;public class Dom4JParser{public void modifyDocument(File inputXml){try{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
List list = document.selectNodes("//article/@level" );
Iterator iter=list.iterator();while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next();if(attribute.getValue().equals("Intermediate"))
attribute.setValue("Introductory");
}
list = document.selectNodes("//article/@date" );
iter=list.iterator();while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next();if(attribute.getValue().equals("December-2001"))
attribute.setValue("October-2002");
}
list = document.selectNodes("//article" );
iter=list.iterator();while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("title");while(iterator.hasNext()){
Element titleElement=(Element)iterator.next();if(titleElement.getText().equals("Java configuration with XMLSchema"))
titleElement.setText("Create flexible and extensible XML schema");
}
}
list = document.selectNodes("//article/author" );
iter=list.iterator();while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("firstname");while(iterator.hasNext()){
Element firstNameElement=(Element)iterator.next();if(firstNameElement.getText().equals("Marcello"))
firstNameElement.setText("Ayesha");
}
}
list = document.selectNodes("//article/author" );
iter=list.iterator();while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("lastname");while(iterator.hasNext()){
Element lastNameElement=(Element)iterator.next();if(lastNameElement.getText().equals("Vitaletti"))
lastNameElement.setText("Malik");
}
}
XMLWriter output = new XMLWriter(new FileWriter( new File("c:/catalog/catalog-modified.xml") ));
output.write( document );
output.close();
} catch(DocumentException e) {
System.out.println(e.getMessage());
} catch(IOException e){
System.out.println(e.getMessage());
}
}public static void main(String[] argv){
Dom4JParser dom4jParser=new Dom4JParser();
dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml"));
}
}
위 내용은 XML을 구문 분석하는 네 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!