Parsing XML
鎴栬浣犳兂瑕佸仛鐨勭涓浠朵簨鎯呭氨鏄В鏋愪竴涓煇縐嶇被鍨嬬殑XML鏂囨。錛岀敤dom4j寰堝鏄撳仛鍒般傝鐪嬩笅闈㈢殑紺鴻寖浠g爜錛?/p>
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Foo {
public Document parse(URL url) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}
}
浣跨敤榪唬鍣紙Iterators錛?/p>
鎴戜滑鍙互閫氳繃澶氱鏂規硶鏉ユ搷浣淴ML鏂囨。錛岃繖浜涙柟娉曡繑鍥瀓ava閲屾爣鍑嗙殑榪唬鍣紙Iterators錛夈備緥濡傦細
public void bar(Document document) throws DocumentException {
Element root = document.getRootElement();
//榪唬鏍瑰厓绱犱笅闈㈢殑鎵鏈夊瓙鍏冪礌
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
//澶勭悊浠g爜
}
//榪唬鏍瑰厓绱犱笅闈㈠悕縐頒負"foo"鐨勫瓙鍏冪礌
for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
Element foo = (Element) i.next();
//澶勭悊浠g爜
}
// 榪唬鏍瑰厓绱犵殑灞炴ttributes錛夊厓绱?br>for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
}
寮哄ぇ鐨刋Path瀵艱埅
鍦╠om4j涓璛Path鍙互琛ㄧず鍑哄湪XML鏍戠姸緇撴瀯涓殑Document鎴栬呬換鎰忕殑鑺傜偣錛圢ode錛夛紙渚嬪錛欰ttribute錛孍lement 鎴栬?ProcessingInstruction絳夛級銆傚畠鍙互浣垮湪鏂囨。涓鏉傜殑鎿嶄綔浠呴氳繃涓琛屼唬鐮佸氨鍙互瀹屾垚銆備緥濡傦細
public void bar(Document document) {
List list = document.selectNodes( "http://foo/bar" );
Node node = document.selectSingleNode( "http://foo/bar/author" );
String name = node.valueOf( "@name" );
}
濡傛灉浣犳兂寰楀埌涓涓猉HTML鏂囨。涓殑鎵鏈夎秴鏂囨湰閾炬帴錛坔ypertext links錛変綘鍙互浣跨敤涓嬮潰鐨勪唬鐮侊細
public void findLinks(Document document) throws DocumentException {
List list = document.selectNodes( "http://a/@href" );
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
Attribute attribute = (Attribute) iter.next();
String url = attribute.getValue();
}
}
濡傛灉浣犻渶瑕佸叧浜嶺Path璇█鐨勪換浣曞府鍔╋紝鎴戜滑寮虹儓鎺ㄨ崘榪欎釜绔欑偣Zvon tutorial浠栦細閫氳繃涓涓竴涓殑渚嬪瓙寮曞浣犲涔犮?/p>
蹇熼亶鍘嗭紙Fast Looping錛?/p>
濡傛灉浣犱笉寰椾笉閬嶅巻涓涓潪甯稿ぇ鐨刋ML鏂囨。錛岀劧鍚庢墠鍘繪墽琛岋紝鎴戜滑寤鴻浣犱嬌鐢ㄥ揩閫熼亶鍘嗘柟娉曪紙fast looping method錛夛紝瀹冨彲浠ラ伩鍏嶄負姣忎竴涓驚鐜殑鑺傜偣鍒涘緩涓涓凱浠e櫒瀵硅薄,濡備笅鎵紺猴細
public void treeWalk(Document document) {
treeWalk( document.getRootElement() );
}
public void treeWalk(Element element) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
treeWalk( (Element) node );
}
else {
// do something....
}
}
}
鐢熸垚涓涓柊鐨刋ML鏂囨。瀵硅薄
鍦╠om4j涓綘鍙兘甯稿父甯屾湜鐢ㄧ▼搴忕敓鎴愪竴涓猉ML鏂囨。瀵硅薄錛屼笅闈㈢殑紼嬪簭涓轟綘榪涜浜嗙ず鑼冿細
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "root" );
Element author1 = root.addElement( "author" )
.addAttribute( "name", "James" )
.addAttribute( "location", "UK" )
.addText( "James Strachan" );
Element author2 = root.addElement( "author" )
.addAttribute( "name", "Bob" )
.addAttribute( "location", "US" )
.addText( "Bob McWhirter" );
return document;
}
}
灝嗕竴涓枃妗e璞″啓鍏ユ枃浠朵腑
灝嗕竴涓枃妗e璞″啓鍏riter瀵硅薄鐨勪竴涓畝鍗曞揩閫熺殑閫斿緞鏄氳繃write()鏂規硶銆?/p>
FileWriter out = new FileWriter( "foo.xml" );
document.write( out );
濡傛灉浣犳兂鏀瑰彉杈撳嚭鏂囦歡鐨勬帓鐗堟牸寮忥紝姣斿浣犳兂瑕佷竴涓紓浜殑鏍煎紡鎴栬呮槸涓涓揣鍑戠殑鏍煎紡錛屾垨鑰呬綘鎯崇敤Writer 瀵硅薄鎴栬匫utputStream 瀵硅薄鏉ユ搷浣滐紝閭d箞浣犲彲浠ヤ嬌鐢╔MLWriter 綾匯?/p>
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Foo {
public void write(Document document) throws IOException {
// 鍐欏叆鏂囦歡
XMLWriter writer = new XMLWriter(
new FileWriter( "output.xml" )
);
writer.write( document );
writer.close();
// 浠ヤ竴縐嶄紭闆呯殑鏍煎紡鍐欏叆System.out瀵硅薄
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter( System.out, format );
writer.write( document );
// 浠ヤ竴縐嶇揣鍑戠殑鏍煎紡鍐欏叆System.out瀵硅薄
format = OutputFormat.createCompactFormat();
writer = new XMLWriter( System.out, format );
writer.write( document );
}
}
杞寲涓哄瓧絎︿覆錛屾垨鑰呬粠瀛楃涓茶漿鍖?/p>
濡傛灉浣犳湁涓涓枃妗o紙Document錛夊璞℃垨鑰呬換浣曚竴涓妭鐐癸紙Node錛夊璞$殑寮曠敤錛坮eference錛夛紝璞″睘鎬э紙Attribute錛夋垨鑰呭厓绱狅紙Element錛夛紝浣犲彲浠ラ氳繃asXML()鏂規硶鎶婂畠杞寲涓轟竴涓粯璁ょ殑XML瀛楃涓詫細
Document document = ...;
String text = document.asXML();
濡傛灉浣犳湁涓浜沊ML鍐呭鐨勫瓧絎︿覆琛ㄧず錛屼綘鍙互閫氳繃DocumentHelper.parseText()鏂規硶灝嗗畠閲嶆柊杞寲涓烘枃妗o紙Document錛夊璞★細
String text = "
Document document = DocumentHelper.parseText(text);
閫氳繃XSLT鏍峰紡鍖栨枃妗o紙Document錛?/p>
浣跨敤Sun鍏徃鎻愪緵鐨凧AXP API灝哫SLT 搴旂敤鍒版枃妗o紙Document錛変笂鏄緢綆鍗曠殑銆傚畠鍏佽浣犱嬌鐢ㄤ換浣曠殑XSLT寮曟搸錛堜緥濡傦細Xalan鎴朣AXON絳夛級鏉ュ紑鍙戙備笅闈㈡槸涓涓嬌鐢↗AXP鍒涘緩涓涓漿鍖栧櫒錛坱ransformer錛夛紝鐒跺悗灝嗗畠搴旂敤鍒版枃妗o紙Document錛変笂鐨勪緥瀛愶細
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
public class Foo {
public Document styleDocument(
Document document,
String stylesheet
) throws Exception {
// 浣跨敤 JAXP 鍔犺澆杞寲鍣?br>TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(
new StreamSource( stylesheet )
);
// 鐜板湪鏉ユ牱寮忓寲涓涓枃妗o紙Document錛?br>DocumentSource source = new DocumentSource( document );
DocumentResult result = new DocumentResult();
transformer.transform( source, result );
// 榪斿洖緇忚繃鏍峰紡鍖栫殑鏂囨。錛圖ocument錛?br>Document transformedDoc = result.getDocument();
return transformedDoc;
}
}