up jczjczjcz(Golden) : 其實有些時候,注意是有些時候可以直接把xml當作文本文件調用,沒有必要調用api,因為我覺得java裡面的sax技術很多東西做的不夠完善,有些功能實現不了,還不如自己做簡單一個解析器
在开始使用 DOM 之前,了解它实际表示什么是值得的。DOM Document 是以层次结构组织起来的节点,或信息片段,的集合。这种层次结构允许开发者浏览树来查找特定信息。通常,分析结构需要在完成任何工作之前装入整个文档并且装入层次结构。由于 DOM 是基于信息的层次结构,因此它被称为是基于树的。对于极其大的文档,装入整个文档并对该文档进行解析会很慢且占用大量资源,所以要用其它方式来处理数据。一些基于事件的模型,如 Simple API for XML(SAX),是工作在数据流之上,在数据流经过时对其进行处理。(SAX 是在 developerWorks XML 专区上另一篇教程的主题。有关更多信息,请参阅参考资料。)<b>基于事件的 API 消除了在内存中构建数据树的需要,但它不允许开发者实际更改原始文档中的数据。</b>另一方面,DOM 还提供了一个 API,该 API 允许开发者为创建应用程序而在树的任何地方添加、编辑、移动或除去节点。
用JDOM,这是目前最好的java包,地址:http://www.jdom.org 下面是例程:import org.jdom.*; import org.jdom.output.*; import org.jdom.input.*;import java.io.*; import java.util.List; public class JDomSample { public static void main(String[] args) throws Exception // 如果有任何异常则抛出 { SAXBuilder sb = new SAXBuilder(); // 新建构造器 Document doc = sb.build(new FileInputStream("E:\\1.xml")); // 读入1.xml Element root = doc.getRootElement(); // 取得根节点, 就是例子中的<total>节点 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.getAttribute("name").getValue(); // 取得属性的值 System.out.println("NAME-->"+name); Element sub = item.getChild("sub"); // 取得当前节点的指定子节点 String text = sub.getText(); // 取得指定子节点的内容 System.out.println("SUB-->"+text); sub.setText("new item"+String.valueOf(i) ); // 改变子节点的内容 } Element item = (Element)list.get(0); // 取得根节点下第一个子节点 Attribute a = new Attribute("started","true"); // 增加一个新的属性 item.addAttribute(a); item.setAttribute("name","new item"); // 改变旧的属性值 String indent = ""; // 缩进符号 boolean newLines = false; // 是否产生新行 XMLOutputter outp = new XMLOutputter (indent,newLines,"gb2312"); // 构造新的输出流 outp.output(doc, new FileOutputStream("E:\\2.xml")); // 输出到2.XML文件中 } }
Element root=dc.createElement("user"); Element node=dc.createElement("name"); Text tempt=dc.createTextNode("abcd"); node.appendChild(tempt); root.appendChild(node);
http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle/CA45E09F1E2EF41E48256B1B000C6C7B?OpenDocument
有关DOM,请参考这里:
http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle/386674F65A47844C48256BD10023D453?OpenDocument
讲的很详细
其實有些時候,注意是有些時候可以直接把xml當作文本文件調用,沒有必要調用api,因為我覺得java裡面的sax技術很多東西做的不夠完善,有些功能實現不了,還不如自己做簡單一個解析器
下面是例程:import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;import java.io.*;
import java.util.List;
public class JDomSample
{
public static void main(String[] args) throws Exception // 如果有任何异常则抛出
{
SAXBuilder sb = new SAXBuilder(); // 新建构造器
Document doc = sb.build(new FileInputStream("E:\\1.xml")); // 读入1.xml Element root = doc.getRootElement(); // 取得根节点, 就是例子中的<total>节点
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.getAttribute("name").getValue(); // 取得属性的值
System.out.println("NAME-->"+name); Element sub = item.getChild("sub"); // 取得当前节点的指定子节点
String text = sub.getText(); // 取得指定子节点的内容
System.out.println("SUB-->"+text);
sub.setText("new item"+String.valueOf(i) ); // 改变子节点的内容
} Element item = (Element)list.get(0); // 取得根节点下第一个子节点 Attribute a = new Attribute("started","true"); // 增加一个新的属性
item.addAttribute(a);
item.setAttribute("name","new item"); // 改变旧的属性值
String indent = ""; // 缩进符号
boolean newLines = false; // 是否产生新行
XMLOutputter outp = new XMLOutputter (indent,newLines,"gb2312"); // 构造新的输出流
outp.output(doc, new FileOutputStream("E:\\2.xml")); // 输出到2.XML文件中
}
}
factory.setValidating(false);
javax.xml.parsers.DocumentBuilder builder=factory.newDocumentBuilder();
Document dc=builder.newDocument();//写空文档对象
Element root=dc.createElement("user");
Element node=dc.createElement("name");
Text tempt=dc.createTextNode("abcd");
node.appendChild(tempt);
root.appendChild(node);
node=dc.createElement("sex");
tempt=dc.createTextNode("m");
node.appendChild(tempt);
root.appendChild(node);
node=dc.createElement("age");
tempt=dc.createTextNode("18");
node.appendChild(tempt);
root.appendChild(node);
dc.appendChild(root);