強大和靈活的處理XML的開源框架:GenXDM
GenXDM是非常著名的中間件軟件廠商TIBCO公司貢獻一個出來XML的一個非常靈活和強大的開源框架(基于Apache的License),其提供了一套機制和接口,把所有的DOM 的操作和解析模型通過一種統一的方式來實現。因此,GenXDM框架本身提供了 AxiomProcessingContext,DomProcessingContext和XmlNodeContext的一套處理機制。其實 GenXDM本身只是一個殼子,必選由相應的Axiom,Dom或者XmlNode的配合起來,才能進行XML文件的create,update和 Read。大家可以從下面的地址去下載其源代碼:http://www.genxdm.org/source-repository.html
最后給大家2個簡單的例子,通過GenXDM生成一個XML數據,非常的靈活和簡單,可以還可以兼容不同的XML的實現的框架。希望能對大家起到拋磚引玉的作用。
(1) 基于org.w3c.dom.Node的實現,生成一個XML的數據
import java.util.Iterator;
import org.genxdm.ProcessingContext;
import org.genxdm.bridge.dom.DomProcessingContext;
import org.genxdm.bridgekit.filters.FilteredFragmentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Node;public class CreateDom { public static void main(String[] args) throws Exception { ProcessingContext<Node> context = new DomProcessingContext(); FilteredFragmentBuilder<Node> builder = (FilteredFragmentBuilder)context.newFragmentBuilder(); final String LF = "\n"; builder.startDocument(null, null); builder.text(LF); builder.comment("comment"); builder.text(LF); builder.processingInstruction("pi", "data"); builder.startElement("http://localhost", "element", ""); builder.namespace("", "http://localhost"); builder.namespace("xlssss", "http://localhost111"); builder.attribute("", "attr", "", "value", null); builder.text("text"); builder.endElement(); builder.endDocument(); Document doc = (Document)builder.getNode(); System.out.println(doc); Iterable<Node> ns = context.getModel().getChildElements(doc); Iterator<Node> iter = ns.iterator(); while(iter.hasNext()){ Node n = iter.next(); System.out.println(context.getModel().getLocalName(n)); } WriteDom2File.write2File(context, doc, "dddd.xml"); } } </pre><br />
(2) 基于org.apache.axiom.om的實現,生成一個XML的數據
import java.util.Iterator;
import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory;
import org.genxdm.ProcessingContext;
import org.genxdm.bridge.axiom.AxiomProcessingContext;
import org.genxdm.io.FragmentBuilder;public class CreateDom { public static void main(String[] args) throws Exception { ProcessingContext<Object> context = new AxiomProcessingContext( new OMLinkedListImplFactory()); FragmentBuilder<Object> builder = context.newFragmentBuilder(); final String LF = "\n"; builder.startDocument(null, null); builder.text(LF); builder.comment("comment"); builder.text(LF); builder.processingInstruction("pi", "data"); builder.startElement("http://localhost", "element", ""); builder.namespace("", "http://localhost"); builder.attribute("", "attr", "", "value", null); builder.text("text"); builder.endElement(); builder.endDocument(); Object doc = builder.getNode(); System.out.println(doc); Iterable<Object> ns = context.getModel().getChildElements(doc); Iterator<Object> iter = ns.iterator(); while (iter.hasNext()) { Object n = iter.next(); System.out.println(context.getModel().getLocalName(n)); } } } </pre><br />
本文由用戶 cey6 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!