1) JDOM的組成.任何一個框架都有自己的組成結構,JDOM雖說不上是一個框架,因為她沒有提供給我們任何的擴展框架.如果說其是一個工具,那么她是一個結構非常簡單的XML操作工具,其包插如下包: org.JDOM org.JDOM.input org.JDOM.output org.JDOM.adapters org.JDOM.transform 我們可以從字面上去理解每個包的作用. JDOM包含以下類型 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 在開發jdom應用程序中我們所用的所有類型....就這幾個類型很簡單就可理解.下面介始一個每個開發包的作用: * org.JDOM.transform 在涉及xslt格式轉換時應使用下面的2個類 JDOMSource JDOMResult * org.JDOM.input 輸入類,一般用于文檔的創建工作 SAXBuilder DOMBuilder ResultSetBuilder 注jdom的輸入源非常廣泛,可以是字符串,可以是其它的XML工具生成的XML文件。 * org.JDOM.output 輸出類,用于文檔轉換輸出 XMLOutputter SAXOutputter DomOutputter JTreeOutputter 從以上輸出類可以看出jdom可以輸出常用類型號XML文件 下面是我寫的一個讀xml,一個創建XML的兩個例程 ================== package jdom; /** * @author * TODO 學習用例 ,pdw2009@tom.com * */ import org.jdom.*; import org.jdom.input.*; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.*; import java.util.*; public class readabc { public static void main(String[] args) throws Exception{ SAXBuilder sb=new SAXBuilder();//建立構造器 Document doc=sb.build(new FileInputStream("E:\\eclipse\\myworkspace\\base\\src\\jdom\\abc.xml")); Element root=doc.getRootElement(); //獲得根結點 List list=root.getChildren(); //將所有根結點下的子結點放入list for(int i=0;i<list.size();i++){ System.out.println("----------------------"); Element item=(Element)list.get(i); //獲得實體結體 //用于獲得屬性 String name=item.getAttributeValue("id"); System.out.println("Name---->"+name); //獲得了節點 String temptitle=item.getChildText("title"); System.out.println("測試"+temptitle); //使用item獲得子節點屬性 Element sub=item.getChild("title"); String title=sub.getText(); System.out.println("title---->"+title); Element sub2=item.getChild("email"); String email=sub2.getText(); System.out.println("email-->"+email); Element sub3=item.getChild("content"); String content=sub3.getValue(); System.out.println("content-->"+content); } } } -----------以上代碼要讀的xml文件內容如下---------------------------- <?xml version="1.0" encoding="gb2312"?> <messages> <message id="jhgjg">i <title>jhgjg</title> <content>jhgjg</content> <email>jhjh</email> </message> <message id="fdsa"> <title>fdsa</title> <content>fasdf</content> <email>fsadfa</email> </message> </messages> -------------------------------------------------------------------------------------------- 創建一個xml文件 ---------------- /* * Created on 2000-1-1 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package jdom; import java.io.FileWriter; import org.jdom.*; import org.jdom.adapters.*; import org.jdom.adapters.*; import org.jdom.input.*; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import java.io.*; /** * @author * * TODO 學習用例 ,pdw2009@tom.com * */ public class createonexml { public static void main(String[] args)throws Exception { Element carElement=new Element("car"); Document mydoc=new Document(carElement); //carElement.addAttribute(new Attribute("vin", "123fhg5869705iop90")); //添加內容 carElement.addContent(new Element("make").addContent("DF")); carElement.addContent(new Element("year").addContent("1997")); carElement.addContent(new Element("color").addContent("green")); carElement.addContent(new Element("listenr").addContent("SSDDDBBA")); //添加注解 carElement.addContent(new Comment("描述一輛車")); //輸出到文件 XMLOutputter outer=new XMLOutputter(); FileWriter fw=new FileWriter("E:\\eclipse\\myworkspace\\base\\src\\jdom\\car.xml"); Format fm=Format.getPrettyFormat(); //設定XML文件的輸出格式 fm.setEncoding("GBK"); outer.setFormat(fm); outer.output(mydoc,fw); outer.output(mydoc,System.out); fw.close(); } } ------------------以上代碼生成的xml文件內容如下--------------- <?xml version="1.0" encoding="GBK"?> <car> <make>DF</make> <year>1997</year> <color>green</color> <listenr>SSDDDBBA</listenr> <!--描述一輛車--> </car> --------------------------------------------------------------------------------------- 在jdom 1。0版本里輸出xml文檔時,我們必須定義該文檔的格式,如xml文件的編輯格式,輸出的xml文檔是否換行,是否刪除我作的空格,等。所以在輸出xml文檔時需定義一個Format對象類,并給相關屬性賦值,然后設定XMLOutputter所用到的格式類,outter.setFormat()。 請關注我有關JDOM的文章希望對你有所幫助。。。。。 詳細說明請參考jdom API文檔 |
|
1 | |
lonely wolf | |
1 將一個xml文件輸出到一個字符串對象里 XMLOutputter outputter = new XMLOutputter(); Element element = new Element("Greeting"); String hello = outputter.outputString(element); 2 一個list轉換成一個xml文件。。雖然其list中的字段是固定了,我們也可以修改類集轉換代碼,以實現動態字段的轉換 package jdom; import java.io.FileWriter; import java.util.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; /** * @author pdw2009@tom.com * TODO 將一個List對象,轉換一個XML文件 */ class Person{ private String ID; //學號 private String name; //姓名 private String addr; //地址 private String tel; //聯系電話 private String email; //email地址 /** * @return Returns the addr. */ public String getAddr() { return addr; } /** * @param addr The addr to set. */ public void setAddr(String addr) { this.addr = addr; } /** * @return Returns the iD. */ public String getID() { return ID; } /** * @param id The iD to set. */ public void setID(String id) { ID = id; } /** * @return Returns the name. */ public String getName() { return name; } /** * @param name The name to set. */ public void setName(String name) { this.name = name; } /** * @return Returns the tel. */ public String getTel() { return tel; } /** * @param tel The tel to set. */ public void setTel(String tel) { this.tel = tel; } /** * @return Returns the email. */ public String getEmail() { return email; } /** * @param email The email to set. */ public void setEmail(String email) { this.email = email; } } public class listtoxml { public List creatlist(){ List list=new ArrayList(); Person person=new Person(); person.setAddr("廣西合浦"); person.setID("1048"); person.setName("hfggf"); person.setTel("138777778888"); person.setEmail("pdw2009@tom.com"); list.add(person); person.setAddr("廣西南寧"); person.setID("1036"); person.setName("蠢盧"); person.setTel("1387778888"); person.setEmail("XXXXX@tom.com"); list.add(person); return list; } public static void main(String[] args) throws Exception { listtoxml lx=new listtoxml(); List list=lx.creatlist(); //生成Person類的對象list Element root=new Element("Student");//根條目; Iterator it=list.iterator(); //獲取iterator接口 while(it.hasNext()){ Person p=(Person)it.next(); Element person=new Element("Person"); person.setAttribute("ID",p.getID()); root.addContent(person); //在根元素下,添加一個person子元素 Element ele=new Element("Name"); ele.setText(p.getName()); person.addContent(ele); //在person元素下添加一個name的子元素 Element addr=new Element("Address"); addr.setText(p.getAddr()); person.addContent(addr); Element tel=new Element("tel"); tel.setText(p.getTel()); person.addContent(tel); Element email=new Element("email"); email.setText(p.getEmail()); person.addContent(email); } Document doc=new Document(root); XMLOutputter outer=new XMLOutputter(); Format fm=Format.getPrettyFormat(); fm.setEncoding("GBK"); outer.setFormat(fm); FileWriter fw=new FileWriter("E:\\eclipse\\myworkspace\\base\\src\\jdom\\listtoxml.xml"); outer.output(doc,fw); //只需要把自己定義的FileWriter替換掉System.out就可以確定xml文件的輸出了 } } 僅供參與,只需要添加你的jdbc連接便于工作可實現,從數據庫里取出記錄并生 |
定位節點
XML是樹狀結構,類似檔案系統內數據夾的結構,XPath也類似檔案系統的路徑命名方式。不過XPath 是一種模式(Pattern),可以選出 XML檔案中,路徑符合某個模式的所有節點出來。例如要選catalog底下的cd中所有price元素可以用:
/catalog/cd/price
如果XPath的開頭是一個斜線(/)代表這是絕對路徑。如果開頭是兩個斜線(//)表示文件中所有符合模式的元素都會被選出來,即使是處于樹中不同的層級也會被選出來。以下的語法會選出文件中所有叫做cd的元素(在樹中的任何層級都會被選出來):
//cd
選擇未知的元素
使用星號(Wildcards,*)可以選擇未知的元素。下面這個語法會選出/catalog/cd 的所有子元素:
/catalog/cd/*
以下的語法會選出所有catalog的子元素中,包含有price作為子元素的元素。
/catalog/*/price
以下的語法會選出有兩層父節點,叫做price的所有元素。
/*/*/price
以下的語法會選擇出文件中的所有元素。
//*
要注意的是,想要存取不分層級的元素,XPath語法必須以兩個斜線開頭(//),想要存取未知元素才用星號(*),星號只能代表未知名稱的元素,不能代表未知層級的元素。
選擇分支
使用中括號可以選擇分支。以下的語法從catalog的子元素中取出第一個叫做cd的元素。XPath的定義中沒有第0元素這種東西。
/catalog/cd[1]
以下語法選擇catalog中的最后一個cd元素:(XPathj并沒有定義 first() 這種函式喔,用上例的 [1]就可以取出第一個元素。
/catalog/cd[last()]
以下語法選出含有price子元素的所有/catalog/cd元素。
/catalog/cd[price]
以下語法選出price元素的值等于10.90的所有/catalog/cd元素
/catalog/cd[price=10.90]
以下語法選出price元素的值等于10.90的所有/catalog/cd元素 的price元素
/catalog/cd[price=10.90]/price
選擇一個以上的路徑
使用Or操作數(|)就可以選擇一個以上的路徑。例如:
/catalog/cd/title | catalog/cd/artist
選擇所有title以及artist元素
//title | //artist
選擇所有title以及artist以及price元素
//title | //artist | //price
選擇屬性
在XPath中,除了選擇元素以外,也可以選擇屬性。屬性都是以@開頭。例如選擇文件中所有叫做country的屬性:
//@country
選擇所有含有country這個屬性的cd元素:
//cd[@country]
以下語法選擇出含有屬性的所有cd元素
//cd[@*]
以下語法選擇出country屬性值為UK的cd元素
//cd[@country='UK']