如果我的xml文件是
<?xml version="1.0" encoding="utf-8"?>
<books>
<book name="book1" class="1" language="1">
<authors >authors1</authors >
<press>press1</press>
</book >
<book name="book2" class="2" language="2">
<authors >authors2</authors >
<press>press2</press>
</book >
<book name="book3" class="1" language="2">
<authors >authors3</authors >
<press>press3</press>
</book >
</books>我想根据book的name操作,进行修改和删除,应该怎么写?
<?xml version="1.0" encoding="utf-8"?>
<books>
<book name="book1" class="1" language="1">
<authors >authors1</authors >
<press>press1</press>
</book >
<book name="book2" class="2" language="2">
<authors >authors2</authors >
<press>press2</press>
</book >
<book name="book3" class="1" language="2">
<authors >authors3</authors >
<press>press3</press>
</book >
</books>我想根据book的name操作,进行修改和删除,应该怎么写?
解决方案 »
- 想问下怎样使暂时不用的按钮变成不可用!
- 一个jar包运行的奇怪问题
- 昨天,我的可用分为800分,今天是928分.昨天获得技术分是5分. 怎么会一下子多出128分呢?
- GLSpeaker(局域网语音,聊天工具)发布,欢迎下载使用,多提建议。java能否捕捉到所有系统事件?
- 一个简单的程序,请大家帮忙看看,为什么这样
- 欢迎光临Java自由人(www.javayou.com) 再散200分啊
- 求core java第五版英文版下载
- java初学者提问,关于方法的调用
- 有关ACCP和系统分析员
- string 和 byte[]转化
- SIPServlet中的doInvite()方法与文件传输
- 图片如何用CM作为计量单位
Element root=getRoot();//获得你的XML的根节点
List list = root.getChildren();
for (int i = 0; i < list.size(); i++)
{
Element book=(Element)list.get(i);
String name=book.getAttributeValue("name");
if(name.equals("book1"))
{
//这里修改或删除
root.removeContent(book);//删除name='book1'的节点
//修改省....
}
}
import java.io.*;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Test{ public static void main(String args[]){
SAXReader saxReader = new SAXReader();
Document document=null;
try
{
document = saxReader.read("books.xml");
List list = document.selectNodes("//books" );
Iterator iter=list.iterator();
while(iter.hasNext())
{
Element booksElement=(Element)iter.next();
Iterator bookiter=booksElement.elementIterator("book");
while(bookiter.hasNext())
{
Element bookElement=(Element)bookiter.next();
Iterator attrIter=bookElement.attributeIterator();
while(attrIter.hasNext())
{
Attribute nameAttribute=(Attribute)attrIter.next();
if(nameAttribute.getName().equals("name")&&nameAttribute.getText().equals("book1"))//name=book1的
{
booksElement.remove(bookElement);
System.out.println("======");
XMLWriter output = new XMLWriter(new FileWriter("books.xml"));
output.write( document );
output.flush();
output.close();
break;
}
}
}
}
}
catch(Exception e){}
}
}
你的代码确实多了点,并且逻辑也比较乱,这种情况下,最好是使用xpath。
这是我修改后的代码,你说的xpath是document.selectSingleNode("//books/book/@name");
这种格式吗?你还有简便的删除方法吗?请指教!谢谢
import java.io.*;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Test
{
public static void main(String args[])
{
SAXReader saxReader = new SAXReader();
Document document=null;
try
{
document = saxReader.read("books.xml");
Element booksElement =(Element) document.selectSingleNode("//books" );
List list =document.selectNodes("//books/book");
Iterator iter=list.iterator();
while(iter.hasNext())
{
Element bookElement = (Element) iter.next();
Attribute nameAttribute = (Attribute) document.selectSingleNode("//books/book/@name");
if(nameAttribute.getText().equals("book1"))//name=book1的
{
booksElement.remove(bookElement);
XMLWriter output = new XMLWriter(new FileWriter("books.xml"));
output.write( document );
output.flush();
output.close();
break;
}
}
}
catch(Exception e){}
}
}
import java.io.*;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Test
{
public static void main(String args[])
{
SAXReader saxReader = new SAXReader();
Document document=null;
try
{
document = saxReader.read("books.xml");
Element booksElement =(Element) document.selectSingleNode("//books" );
List list =document.selectNodes("//books/book/@name");
Iterator iter=list.iterator();
while(iter.hasNext())
{
Attribute nameAttribute = (Attribute) iter.next();
if(nameAttribute.getText().equals("book1"))//name=book1的
{
booksElement.remove(nameAttribute.getParent());
XMLWriter output = new XMLWriter(new FileWriter("books.xml"));//回写xml文件
output.write( document );
output.flush();
output.close();
break;
}
}
}
catch(Exception e){}
}
}