dom4j 鏄竴縐嶈В鏋?XML 鏂囨。鐨勫紑鏀炬簮浠g爜 XML 妗嗘灦銆傛湰鏂囦粙緇嶅浣曚嬌鐢ㄥ寘鍚湪 dom4j 涓殑瑙f瀽鍣ㄥ垱寤哄茍淇敼 XML 鏂囨。銆?/blockquote>
dom4j API 鍖呭惈涓涓В鏋?XML 鏂囨。鐨勫伐鍏楓傛湰鏂囦腑灝嗕嬌鐢ㄨ繖涓В鏋愬櫒鍒涘緩涓涓ず渚?XML 鏂囨。銆傛竻鍗?1 鏄劇ず浜嗚繖涓ず渚?XML 鏂囨。錛宑atalog.xml銆?/p>
娓呭崟 1. 紺轟緥 XML 鏂囨。錛坈atalog.xml錛?/b>
<?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>
|
鐒跺悗浣跨敤鍚屼竴涓В鏋愬櫒淇敼 catalog.xml錛屾竻鍗?2 鏄慨鏀瑰悗鐨?XML 鏂囨。錛宑atalog-modified.xml銆?/p>
娓呭崟 2. 淇敼鍚庣殑 XML 鏂囨。錛坈atalog-modified.xml錛?/b>
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<!--An XML catalog-->
<?target instruction?>
<journal title="XML Zone"
publisher="IBM developerWorks">
<article level="Introductory" date="October-2002">
<title>Create flexible and extensible XML schemas</title>
<author>
<firstname>Ayesha</firstname>
<lastname>Malik</lastname>
</author>
</article>
</journal>
</catalog>
|
涓?W3C DOM API 鐩告瘮錛屼嬌鐢?dom4j 鎵鍖呭惈鐨勮В鏋愬櫒鐨勫ソ澶勬槸 dom4j 鎷ユ湁鏈湴鐨?XPath 鏀寔銆侱OM 瑙f瀽鍣ㄤ笉鏀寔浣跨敤 XPath 閫夋嫨鑺傜偣銆?/p>
鏈枃鍖呮嫭浠ヤ笅鍑犱釜閮ㄥ垎錛?/p>
棰勫厛璁劇疆
榪欎釜瑙f瀽鍣ㄥ彲浠ヤ粠 http://dom4j.org 鑾峰彇銆傞氳繃璁劇疆浣?dom4j-1.4/dom4j-full.jar
鑳藉鍦?classpath 涓闂紝璇ユ枃浠朵腑鍖呮嫭 dom4j 綾匯乆Path 寮曟搸浠ュ強 SAX 鍜?DOM 鎺ュ彛銆傚鏋滃凡緇忎嬌鐢ㄤ簡 JAXP 瑙f瀽鍣ㄤ腑鍖呭惈鐨?SAX 鍜?DOM 鎺ュ彛錛屽悜 classpath 涓鍔?dom4j-1.4/dom4j.jar
銆?dom4j.jar
鍖呮嫭 dom4j 綾誨拰 XPath 寮曟搸錛屼絾鏄笉鍚?SAX 涓?DOM 鎺ュ彛銆?
鍒涘緩鏂囨。
鏈妭璁ㄨ浣跨敤 dom4j API 鍒涘緩 XML 鏂囨。鐨勮繃紼嬶紝騫跺垱寤虹ず渚?XML 鏂囨。 catalog.xml銆?/p>
浣跨敤 import 璇彞瀵煎叆 dom4j API 綾伙細
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
|
浣跨敤 DocumentHelper
綾誨垱寤轟竴涓枃妗e疄渚嬨?DocumentHelper
鏄敓鎴?XML 鏂囨。鑺傜偣鐨?dom4j API 宸ュ巶綾匯?
Document document = DocumentHelper.createDocument();
|
浣跨敤 addElement()
鏂規硶鍒涘緩鏍瑰厓绱?catalog
銆?addElement()
鐢ㄤ簬鍚?XML 鏂囨。涓鍔犲厓绱犮?
Element catalogElement = document.addElement("catalog");
|
鍦?catalog
鍏冪礌涓嬌鐢?addComment()
鏂規硶娣誨姞娉ㄩ噴鈥淎n XML catalog鈥濄?
catalogElement.addComment("An XML catalog");
|
鍦?catalog
鍏冪礌涓嬌鐢?addProcessingInstruction()
鏂規硶澧炲姞涓涓鐞嗘寚浠ゃ?
catalogElement.addProcessingInstruction("target","text");
|
鍦?catalog
鍏冪礌涓嬌鐢?addElement()
鏂規硶澧炲姞 journal
鍏冪礌銆?
Element journalElement = catalogElement.addElement("journal");
|
浣跨敤 addAttribute()
鏂規硶鍚?journal
鍏冪礌娣誨姞 title
鍜?publisher
灞炴с?
journalElement.addAttribute("title", "XML Zone");
journalElement.addAttribute("publisher", "IBM developerWorks");
|
鍚?article
鍏冪礌涓坊鍔?journal
鍏冪礌銆?
Element articleElement=journalElement.addElement("article");
|
涓?article
鍏冪礌澧炲姞 level
鍜?date
灞炴с?
articleElement.addAttribute("level", "Intermediate");
articleElement.addAttribute("date", "December-2001");
|
鍚?article
鍏冪礌涓鍔?title
鍏冪礌銆?
Element titleElement=articleElement.addElement("title");
|
浣跨敤 setText()
鏂規硶璁劇疆 article
鍏冪礌鐨勬枃鏈?
titleElement.setText("Java configuration with XML Schema");
|
鍦?article
鍏冪礌涓鍔?author
鍏冪礌銆?
Element authorElement=articleElement.addElement("author");
|
鍦?author
鍏冪礌涓鍔?firstname
鍏冪礌騫惰緗鍏冪礌鐨勬枃鏈?
Element firstNameElement=authorElement.addElement("firstname");
firstNameElement.setText("Marcello");
|
鍦?author
鍏冪礌涓鍔?lastname
鍏冪礌騫惰緗鍏冪礌鐨勬枃鏈?
Element lastNameElement=authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
|
鍙互浣跨敤 addDocType()
鏂規硶娣誨姞鏂囨。綾誨瀷璇存槑銆?
document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd");
|
榪欐牱灝卞悜 XML 鏂囨。涓鍔犳枃妗g被鍨嬭鏄庯細
<!DOCTYPE catalog SYSTEM "file://c:/Dtds/catalog.dtd">
|
濡傛灉鏂囨。瑕佷嬌鐢ㄦ枃妗g被鍨嬪畾涔夛紙DTD錛夋枃妗i獙璇佸垯蹇呴』鏈?Doctype銆?/p>
XML 澹版槑 <?xml version="1.0" encoding="UTF-8"?>
鑷姩娣誨姞鍒?XML 鏂囨。涓?
娓呭崟 3 鎵紺虹殑渚嬪瓙紼嬪簭 XmlDom4J.java 鐢ㄤ簬鍒涘緩 XML 鏂囨。 catalog.xml銆?/p>
娓呭崟 3. 鐢熸垚 XML 鏂囨。 catalog.xml 鐨勭▼搴忥紙XmlDom4J.java錛?/b>
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();
}}
|
榪欎竴鑺傝璁轟簡鍒涘緩 XML 鏂囨。鐨勮繃紼嬶紝涓嬩竴鑺傚皢浠嬬粛浣跨敤 dom4j API 淇敼榪欓噷鍒涘緩鐨?XML 鏂囨。銆?
淇敼鏂囨。
榪欎竴鑺傝鏄庡浣曚嬌鐢?dom4j API 淇敼紺轟緥 XML 鏂囨。 catalog.xml銆?/p>
浣跨敤 SAXReader 瑙f瀽 XML 鏂囨。 catalog.xml錛?/p>
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
|
SAXReader
鍖呭惈鍦?org.dom4j.io 鍖呬腑銆?
inputXml
鏄粠 c:/catalog/catalog.xml 鍒涘緩鐨?java.io.File銆備嬌鐢?XPath 琛ㄨ揪寮忎粠 article
鍏冪礌涓幏寰?level
鑺傜偣鍒楄〃銆傚鏋?level
灞炴у兼槸鈥淚ntermediate鈥濆垯鏀逛負鈥淚ntroductory鈥濄?
List list = document.selectNodes("http://article/@level" );
Iterator iter=list.iterator();
while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next();
if(attribute.getValue().equals("Intermediate"))
attribute.setValue("Introductory");
}
|
鑾峰彇 article
鍏冪礌鍒楄〃錛屼粠 article
鍏冪礌涓殑 title
鍏冪礌寰楀埌涓涓凱浠e櫒錛屽茍淇敼 title
鍏冪礌鐨勬枃鏈?
list = document.selectNodes("http://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");
}}
|
閫氳繃鍜?title
鍏冪礌綾諱技鐨勮繃紼嬩慨鏀?author
鍏冪礌銆?
娓呭崟 4 鎵紺虹殑紺轟緥紼嬪簭 Dom4JParser.java 鐢ㄤ簬鎶?catalog.xml 鏂囨。淇敼鎴?catalog-modified.xml 鏂囨。銆?/p>
娓呭崟 4. 鐢ㄤ簬淇敼 catalog.xml 鐨勭▼搴忥紙Dom4Jparser.java錛?/b>
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("http://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("http://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("http://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");
}
}
list = document.selectNodes("http://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("http://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"));
}
}
|
榪欎竴鑺傝鏄庝簡濡備綍浣跨敤 dom4j 涓殑瑙f瀽鍣ㄤ慨鏀圭ず渚?XML 鏂囨。銆傝繖涓В鏋愬櫒涓嶄嬌鐢?DTD 鎴栬呮ā寮忛獙璇?XML 鏂囨。銆傚鏋?XML 鏂囨。闇瑕侀獙璇侊紝鍙互瑙i噴鐢?dom4j 涓?JAXP SAX 瑙f瀽鍣ㄣ?/p>
緇撴潫璇?/font>
鍖呭惈鍦?dom4j 涓殑瑙f瀽鍣ㄦ槸涓縐嶇敤浜庤В鏋?XML 鏂囨。鐨勯潪楠岃瘉鎬у伐鍏鳳紝鍙互涓嶫AXP銆丆rimson 鎴?Xerces 闆嗘垚銆傛湰鏂囪鏄庝簡濡備綍浣跨敤璇ヨВ鏋愬櫒鍒涘緩鍜屼慨鏀?XML 鏂囨。銆?

]]>