本站不再更新,欢迎光临 java开发技术网
随笔-230  评论-230  文章-8  trackbacks-0
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属性值为UKcd元素

 
//cd[@country='UK']
posted on 2006-10-13 09:09 有猫相伴的日子 阅读(1222) 评论(2)  编辑  收藏 所属分类: jdk

评论:
# re: JDOM入门 2010-05-18 11:27 | lll
写的太好,太全了,太感谢了!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!  回复  更多评论
  
# re: JDOM入门 2014-05-03 18:48 | lin
顶,  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
本站不再更新,欢迎光临 java开发技术网