高分,XML文件的读写,修改等。今天结帖。

kkkdyc 2008-03-10 10:09:30
以下面这个简单的XML文件为基础,给出一段能读取,修改该XML的java代码
最好是调试通过的…… 我是小白,自己不会整的;
具体实现功能:
1 新增加1个节点
<book id="B04">
<name>book4</name>
<price>40</price>
<memo>This is book4</memo>
</book>
2 修改节点1

<book id="B01">
<name>book1</name>
<price>100</price>
<memo>This is book1</memo>
</book>
3删除节点2
<book id="B02">
<name>book2</name>
<price>20</price>
<memo>This is book2</memo>
</book>
4最好是符合W3C规范的?


<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="B01">
<name>book1</name>
<price>10</price>
<memo>This is book1</memo>
</book>
<book id="B02">
<name>book2</name>
<price>20</price>
<memo>This is book2</memo>
</book>
<book id="B03">
<name>book3</name>
<price>30</price>
<memo>This is book3</memo>
</book>
</books>
...全文
280 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
canglongyt 2011-05-19
  • 打赏
  • 举报
回复
获益匪浅,感谢
kkkdyc 2008-03-10
  • 打赏
  • 举报
回复
成功了。thanks.
kkkdyc 2008-03-10
  • 打赏
  • 举报
回复
谢谢各位!

TO fanwenqiang666
我的油箱是niaoniaocn@sina.com 快来给我加油~~ ^_^
TO legend_jhz
试了你的方法,但是出错了~
Document doc = reader.read(new File("dom4j.xml"));
错误如下:
org.dom4j.DocumentException: Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at org.dom4j.io.SAXReader.read(SAXReader.java:355)
at org.dom4j.io.SAXReader.read(SAXReader.java:219)
at page1.TEST.addNode(TEST.java:24)
at page1.TEST.main(TEST.java:17)
Nested exception:
org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPIData(XMLScanner.java:689)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanPIData(XMLDocumentFragmentScannerImpl.java:750)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPI(XMLScanner.java:664)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(XMLDocumentScannerImpl.java:845)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at org.dom4j.io.SAXReader.read(SAXReader.java:219)
at page1.TEST.addNode(TEST.java:24)
at page1.TEST.main(TEST.java:17)
Nested exception: org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPIData(XMLScanner.java:689)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanPIData(XMLDocumentFragmentScannerImpl.java:750)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPI(XMLScanner.java:664)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(XMLDocumentScannerImpl.java:845)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at org.dom4j.io.SAXReader.read(SAXReader.java:219)
at page1.TEST.addNode(TEST.java:24)
at page1.TEST.main(TEST.java:17)
zhuzhigangmsn 2008-03-10
  • 打赏
  • 举报
回复
dom4j好使!
lyboyc 2008-03-10
  • 打赏
  • 举报
回复
建议用DOM4J。封装的好,比较简单。sax最烦琐
legend_jhz 2008-03-10
  • 打赏
  • 举报
回复
我使用dom4j做的,编译通过。
1.添加节点
public void addNode() {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("dom4j.xml"));
Element root = doc.getRootElement();
Element bookElement = root.addElement("book");
bookElement.addAttribute("id", "B04");
Element nameElement = bookElement.addElement("name");
nameElement.setText("book4");
Element priceElement = bookElement.addElement("price");
priceElement.setText("40");
Element memoElement = bookElement.addElement("memo");
memoElement.setText("This is book4");
XMLWriter writer = new XMLWriter(new FileWriter("dom4j.xml"));
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2.修改节点
public void refNode() {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("dom4j.xml"));
Element root = doc.getRootElement();
List ls = root.elements();
Element el = (Element) ls.get(0);
Element price = el.element("price");
price.setText("100");
XMLWriter writer = new XMLWriter(new FileWriter("dom4j.xml"));
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.删除节点
public void delNode() {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("dom4j.xml"));
Element root = doc.getRootElement();
List ls = root.elements();
Element el = (Element) ls.get(1);
root.remove(el);
XMLWriter writer = new XMLWriter(new FileWriter("dom4j.xml"));
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
fangtaohbjjxy 2008-03-10
  • 打赏
  • 举报
回复
package Dom.xml;

public class Book {
String name;
String price;
String meme;
String book_id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMeme() {
return meme;
}
public void setMeme(String meme) {
this.meme = meme;
}
public String getBook_id() {
return book_id;
}
public void setBook_id(String book_id) {
this.book_id = book_id;
}
}
  • 打赏
  • 举报
回复
java提供四种对xml解析的解析器 (要解析XML还需要相应的Jar包)
1、sax (常用,生成xml功能比较弱) sax Jar下载(1770k)
基于解析事件的拦截
2、jdom (常用)jdom Jar下载(1770k) 还需要sax包
解析详细的元素时基于树(针对整个xml文件解析时,是基于对象的)
3、dom4j (常用)dom4j Jar下载(475k)
解析详细的元素时基于树(针对整个xml文件解析时,是基于对象的)
4、dom(基础)dom Jar包下载(201k)
解析详细的元素时基于树(针对整个xml文件解析时,是基于对象的)


我个人认为Dom4j比较简单!如果你是一个新手,建议你发一下E_mail 给你传一份完整的项目。
Kreocn 2008-03-10
  • 打赏
  • 举报
回复
给LZ一个我以前写的读取XML的API,最基本的...仅仅做参考


package my.test;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class uDom {

Document doc=null;

public uDom(String xmlfile) {
DocumentBuilder dbf;
try {
dbf = DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = dbf.parse(xmlfile);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 读取XML文件节点内容
* @param nodeName 节点名称
* @return
*/
public Object[] readNode(String nodeName) {
Object nodeValue[]=null;
NodeList nodelist = doc.getElementsByTagName(nodeName);
nodeValue=new Object[nodelist.getLength()];
//System.out.println("getLength:" + nodelist.getLength());
//System.out.println("getNodeName"+"\t"+"getNodeValue"+"\t"+"getAttribute");
for (int i = 0; i < nodelist.getLength(); i++) {
Element element =(Element)nodelist.item(i);
//System.out.println(element.getNodeName()+"\t"+element.getNodeValue()+"\t"+element.getAttribute("num"));
nodeValue[i]=element.getNodeValue();
}
return nodeValue;
}

/**
* 读取XML文件节点属性内容
* @param nodeName 节点名称
* @param Attribute 节点属性名称
* @return
*/
public Object[] readNode(String nodeName,String Attribute) {
Object AttrValue[]=null;
NodeList nodelist = doc.getElementsByTagName(nodeName);
AttrValue=new Object[nodelist.getLength()];
for (int i = 0; i < nodelist.getLength(); i++) {
Element element =(Element)nodelist.item(i);
//System.out.println(element.getNodeName()+"\t"+element.getNodeValue()+"\t"+element.getAttribute("num"));
AttrValue[i]=element.getAttribute(Attribute);
}
return AttrValue;
}

public uDom() {
// TODO Auto-generated constructor stub
try {
this.readxml();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void readxml() throws ParserConfigurationException, SAXException,
IOException {

String nodename = null;

short nodetype = 0;

String nodevalue = null;

DocumentBuilder dbf = DocumentBuilderFactory.newInstance().newDocumentBuilder();
System.out.println("Get DocumentBuilder Successful...");

Document doc = dbf.parse("d:/TestFile/links.xml");
System.out.println("Get Document Successful...");

NodeList nl1 = doc.getElementsByTagName("message");
System.out.println("Get NodeList(links) Successful...");
System.out.println("getLength:" + nl1.getLength());

Node node2 = doc.getFirstChild().getChildNodes().item(1);
// Node node3 = doc.getFirstChild();
Node node1 = nl1.item(4);
// Node node2 = doc.getFirstChild();

// Node node3 = node2.getFirstChild();
// Node node4 = node3.getFirstChild();
for (int i = 0; i < 2; i++) {
System.out.println(node2.getChildNodes().item(i).getNodeName());
System.out.println(node2.getChildNodes().item(i).getNodeValue());
}

// System.out.println(node2.getFirstChild().getNextSibling().getNodeName());
System.exit(0);

nodename = node1.getFirstChild().getNodeName();

nodetype = node1.getFirstChild().getNodeType();

nodevalue = node1.getFirstChild().getNodeValue();

System.out.println("getNodeName:" + nodename);
System.out.println("getNodeType:" + nodetype);
System.out.println("getNodeValue:" + nodevalue);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
uDom udom = new uDom("xml/test.XML");
System.out.println("读取XML文件成功~~");
Object[] temp=udom.readNode("root","num");
System.out.println("获得节点长度为:"+temp.length);
for(int i=0;i<temp.length;i++) {
//temp[i]可能会得到空指针异常
System.out.println(i+" Value: "+temp[i].toString());
}
}

}

duzhonghua 2008-03-10
  • 打赏
  • 举报
回复
也没做过,呵呵,看看有没有高手来
tianyidan 2008-03-10
  • 打赏
  • 举报
回复
没做过,关注,帮顶!~~~
zs_han 2008-03-10
  • 打赏
  • 举报
回复
帮顶

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧