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']
posted on 2006-10-13 09:09
有貓相伴的日子 閱讀(1246)
評論(2) 編輯 收藏 所屬分類:
jdk