XML文档的简易增删查改

dom4j解析
一、利用dom4j操作元素节点
1.查询第一本书的书名,并输出到控制台
2.给第一本书添加一个特价节点, 并修改第一本书的售价节点的内容为19.8元
3.删除第二本书的作者节点
二、利用dom4j操作属性节点
1.给第一本书添加一个属性,如:出版社="清华大学出版社"
2.在控制台上打印输出第一本书的出版社属性的值, 并更新属性的值为“人民出版社”
3.删除第一本书的出版社属性
-------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<书架>
<书>
<书名>数据结构</书名>
<作者>严蔚敏</作者>
<售价>29.00元</售价>
</书>
<书>
<书名>高等数学</书名>
<作者>同济大学数学系</作者>
<售价>55.00元</售价>
</书>
</书架>
-------------------------------------------

代码实现如下:

import java.io.FileWriter;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class DomTest {
/*
* 一、利用dom4j操作元素节点
1.查询第一本书的书名,并输出到控制台
2.给第一本书添加一个特价节点, 并修改第一本书的售价节点的内容为19.8元
3.删除第二本书的作者节点
二、利用dom4j操作属性节点
1.给第一本书添加一个属性,如:出版社="清华大学出版社"
2.在控制台上打印输出第一本书的出版社属性的值, 并更新属性的值为“人民出版社”
3.删除第一本书的出版社属性
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {
//创建一个输入流,使xml文件成为一个document,先建立一个对象reader,然后
//用这个对象去调用方法
SAXReader reader = new SAXReader();

//读取xml文件
Document doc = reader.read("src/1.xml");
//查询第一本书的名字,并输出到控制台
//先获取根目录
Element root =doc.getRootElement();
//迭代获取下面的元素(子目录)
Iterator it1 = root.elementIterator("书");
//获取二级子目录
Element e1 = (Element) it1.next();
Iterator it2 = e1.elementIterator("书名");
Element e2 = (Element) it2.next();
System.out.println(e2.getName() "---" e2.getText());
//以上内容完成了查的工作
//2.给第一本书添加一个特价节点, 并修改第一本书的售价节点的内容为19.8元
//创建一个书下面的新的节点为“特价”
Element e3 = e1.addElement("特价");
Iterator it4 = e1.elementIterator("售价");
Element e6 =(Element) it4.next();
e6.setText("19.8元");

//3.删除第二本书的作者节点
Element e4 = (Element) it1.next();
Iterator it3 = e4.elementIterator("作者");
Element e5 = (Element) it3.next();
boolean b = e4.remove(e5);
System.out.println(b);

//给第一本书添加一个属性,如:出版社="清华大学出版社"
//设置后返回的是该元素,也就是e7和e1是同一个
Element e7 = e1.addAttribute("出版社", "清华大学出版社");
//在控制台上打印输出第一本书的出版社属性的值, 并更新属性的值为“人民出版社”
Attribute a = e1.attribute("出版社");
System.out.println(a.getValue());
a.setValue("人民 出版社");
System.out.println(a.getValue());
//删除第一本书的出版社属性
e1.remove(a);

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(new FileWriter("src/2.xml"),format);
writer.write(doc);
writer.close();
}

}


更多专业前端知识,请上 【猿2048】www.mk2048.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Qt 中,可以使用 QDomDocument 类来实现 XML 文件的增删查改操作。以下是一个示例代码,演示了如何在 XML 文件中执行增删查改操作: ```cpp #include <QDomDocument> #include <QFile> #include <QDebug> // 增加节点 void addNode(QDomElement& parent, const QString& tagName, const QString& text = "") { QDomDocument doc = parent.ownerDocument(); QDomElement element = doc.createElement(tagName); if (!text.isEmpty()) { QDomText textNode = doc.createTextNode(text); element.appendChild(textNode); } parent.appendChild(element); } // 删除节点 void deleteNode(QDomElement& parent, const QString& tagName) { QDomNodeList nodes = parent.elementsByTagName(tagName); for (int i = nodes.size() - 1; i >= 0; --i) { QDomNode node = nodes.at(i); parent.removeChild(node); } } // 修改节点内容 void modifyNode(QDomElement& parent, const QString& tagName, const QString& newText) { QDomNodeList nodes = parent.elementsByTagName(tagName); for (int i = 0; i < nodes.size(); ++i) { QDomNode node = nodes.at(i); if (node.isElement()) { QDomElement element = node.toElement(); element.firstChild().setNodeValue(newText); } } } // 查询节点 void queryNode(const QDomElement& parent, const QString& tagName) { QDomNodeList nodes = parent.elementsByTagName(tagName); for (int i = 0; i < nodes.size(); ++i) { QDomNode node = nodes.at(i); if (node.isElement()) { QDomElement element = node.toElement(); qDebug() << "标签名:" << element.tagName(); qDebug() << "内容:" << element.text(); } } } int main() { // 创建 QDomDocument 对象 QDomDocument doc; // 加载 XML 文件 QFile file("example.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "无法打开文件"; return 1; } if (!doc.setContent(&file)) { file.close(); qDebug() << "无法设置 XML 内容"; return 1; } file.close(); // 获取根元素 QDomElement root = doc.documentElement(); // 增加节点 addNode(root, "newNode", "New Node Content"); // 删除节点 deleteNode(root, "oldNode"); // 修改节点内容 modifyNode(root, "existingNode", "Modified Content"); // 查询节点 queryNode(root, "newNode"); // 将修改后的 XML 内容保存到文件 QFile outputFile("output.xml"); if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "无法打开输出文件"; return 1; } QTextStream stream(&outputFile); stream << doc.toString(); outputFile.close(); return 0; } ``` 请注意,您需要将示例代码中的 "example.xml" 替换为您要处理的实际 XML 文件的路径。该示例演示了如何增加节点、删除节点、修改节点内容和查询节点,并将修改后的 XML 内容保存到另一个文件中。 希望这个示例能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值