import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.ScrollPaneConstants;
import javax.swing.filechooser.FileFilter;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
//测试类
public class Exec {
public static void main(String[] args) {
// 创建窗体类变量
DemoWindow dw = new DemoWindow("插入XML节点");
// 将窗体的宽度和高度分别设置为屏幕宽度和屏幕高度的1/3,左上角位置也设置为屏幕宽度和屏幕高度的1/3处
Toolkit theKit = dw.getToolkit();
Dimension wndSize = theKit.getScreenSize();
dw.setBounds(wndSize.width / 3, wndSize.height / 3, wndSize.width / 3,
wndSize.height / 3);
// 点击关闭按钮可以退出程序
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体为可见
dw.setVisible(true);
}
}
// 界面窗体
class DemoWindow extends JFrame implements ActionListener {
// 提示标签
JLabel jl1 = new JLabel("学号");
JLabel jl2 = new JLabel("姓名");
// 显示XML文件路径的文本框
JTextField jtf1 = new JTextField(15);
// 输入学号的文本框
JTextField jtf2 = new JTextField(5);
// 输入姓名的文本框
JTextField jtf3 = new JTextField(5);
// 操作按钮
JButton jb1 = new JButton("打开XML文件");
JButton jb2 = new JButton("插入XML节点");
// 布局面板
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
// 树状视图的节点
DefaultMutableTreeNode dmtn = null;
// 树状视图
JTree tree = null;
// 设置树状视图的滚动条
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jsp = new JScrollPane(tree, v, h);
// XML文档构建工厂
DocumentBuilderFactory dbf = null;
// XML文档构建器
DocumentBuilder db = null;
// XML文档
Document doc = null;
// 构造函数
public DemoWindow(String title) {
super(title);
// 窗体布局
jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
jp1.add(jtf1);
jp1.add(jb1);
jp2.add(jl1);
jp2.add(jtf2);
jp2.add(jl2);
jp2.add(jtf3);
jp2.add(jb2);
add(jp1, BorderLayout.NORTH);
add(jsp, BorderLayout.CENTER);
add(jp2, BorderLayout.SOUTH);
// 隐藏输入信息的组件
jp2.setVisible(false);
// 添加事件监听器
jb1.addActionListener(this);
jb2.addActionListener(this);
}
// 响应单击按钮
public void actionPerformed(ActionEvent ae) {
// 处理打开XML文件
if (ae.getSource() == jb1) {
// 设置文件选择对话框
JFileChooser jfc = new JFileChooser(System.getProperty("user.dir"));
// 设置只选择XML文件
jfc.setFileFilter(new XMLFilter());
// 如果选中,生成相应的树状视图
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
// 显示XML文件的完整路径
jtf1.setText(jfc.getSelectedFile().getAbsolutePath());
try {
// 创建XML文档构建工厂
dbf = DocumentBuilderFactory.newInstance();
// 创建XML文档构建器
db = dbf.newDocumentBuilder();
// 获取XML文档
doc = db.parse("file:"+jfc.getSelectedFile().getAbsolutePath());
// 规范化XML文档
doc.normalize();
// 获取XML文档根节点
Node elm = doc.getDocumentElement();
// 给树状视图添加根节点
dmtn = new DefaultMutableTreeNode(elm.getNodeName());
// 给树状视图添加子节点
addChildNodes(dmtn, elm);
// 创建树状视图
tree = new JTree(dmtn);
// 添加事件监听器,右击树状视图的节点,可以显示快捷菜单
tree.addMouseListener(new MouseAdapter() {
// 响应按下鼠标
public void mousePressed(MouseEvent e) {
// 如果是右击
if (e.getButton() == MouseEvent.BUTTON3) {
// 获取鼠标点击的树状视图行号
int selRow = tree.getRowForLocation(e.getX(), e
.getY());
// 选中当前行
tree.setSelectionRow(selRow);
// 获取树状视图的选择路径
TreePath tp = tree.getSelectionPath();
// 获取树状视图选择路径的最后一个节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp
.getLastPathComponent();
// 如果选中了有效的“student”节点
if (selRow != -1
&& node.toString().equals("student")
&& node.getParent() != null) {
// 如果是单击
if (e.getClickCount() == 1) {
// 创建快捷菜单
JPopupMenu pop = new JPopupMenu();
JMenuItem item1 = new JMenuItem(
"在此节点前插入");
pop.add(item1);
// 给快捷菜单添加事件监听器
item1
.addActionListener(new MenuAction());
// 显示快捷菜单
pop.show(tree, e.getX(), e.getY());
}
}
}
}
});
// 更新滚动面板
jsp.setViewportView(tree);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
// 处理插入XML文件
else if (ae.getSource() == jb2) {
// 创建XML元素节点
Element elmStudent = doc.createElement("student");
Element elmNumber = doc.createElement("number");
Element elmName = doc.createElement("name");
// 创建XML文本节点
Text txtNumber = doc.createTextNode(jtf2.getText());
Text txtName = doc.createTextNode(jtf3.getText());
// 添加XML节点
elmNumber.appendChild(txtNumber);
elmName.appendChild(txtName);
elmStudent.appendChild(elmNumber);
elmStudent.appendChild(elmName);
// 获取树状视图的选择路径
TreePath tp = tree.getSelectionPath();
// 获取树状视图选择路径的最后一个节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp
.getLastPathComponent();
// 获取树状视图所选节点的“number”子节点内容
String currentNumber = node.getChildAt(0).getChildAt(0).toString();
// 获取所有的“number”子节点
NodeList nl = doc.getElementsByTagName("number");
// 在节点列表中搜索与当前树状视图所选节点“number”子节点内容一样的元素
for (int i = 0; i < nl.getLength(); i++) {
// 获取“number”子节点的值
Node subNode = nl.item(i).getChildNodes().item(0);
// 如果一样
if (subNode.getNodeValue().equals(currentNumber)) {
// 获取XML根节点
Node parentNode = subNode.getParentNode().getParentNode();
// 插入新的student节点
parentNode.getParentNode().insertBefore(elmStudent,
parentNode);
// 规范化XML文档
doc.normalize();
try {
// 创建转换工厂类
TransformerFactory tFactory = TransformerFactory
.newInstance();
// 创建转换类
Transformer transformer = tFactory.newTransformer();
// 创建DOM源
DOMSource source = new DOMSource(doc);
// 创建XML的输出结果流
StreamResult result = new StreamResult(
new java.io.File(jtf1.getText()));
// 利用DOM更新XML文件
transformer.transform(source, result);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
}
}
// 获取树状视图的模型
DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel();
// 在树状视图中�
没有合适的资源?快使用搜索试试~ 我知道了~
java-xml.zip_xml;源代码;
共43个文件
java:20个
xml:15个
dtd:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 37 浏览量
2022-09-21
00:11:28
上传
评论
收藏 48KB ZIP 举报
温馨提示
Java通用范例开发金典-- 源码。xml文件的处理,各种函数操作,源代码,可直接运行。
资源推荐
资源详情
资源评论
收起资源包目录
java-xml.zip (43个子文件)
ch13XML处理
13-13
Student.java 1KB
Grade.java 587B
生成的stus.xml 810B
Exec.java 622B
13-14
Student.java 1KB
Grade.java 587B
stus.xml 805B
Exec.java 674B
13-4
stu.xml 600B
Exec.java 5KB
13-2
stu.xml 658B
Exec.java 6KB
13-7
stu.xml 597B
Exec.java 11KB
13-9
stu.xml 649B
ss.html 1KB
stu.xsl 869B
Exec.java 7KB
13-16
SQL脚本.sql 453B
Exec.java 2KB
13-11
stu.dtd 161B
stu.xml 621B
Thumbs.db 5KB
Exec.java 5KB
13-12
stu.xsd 705B
stu.xml 695B
Exec.java 6KB
13-10
stu.dtd 161B
stu.xml 621B
Exec.java 5KB
13-15
stu.xml 597B
SQL脚本.sql 129B
Exec.java 2KB
13-3
stu.xml 601B
Exec.java 5KB
13-6
stu.xml 597B
Exec.java 8KB
13-1
stu.xml 600B
Exec.java 6KB
13-8
stu.xml 597B
Exec.java 9KB
13-5
stu.xml 753B
Exec.java 1KB
共 43 条
- 1
资源评论
御道御小黑
- 粉丝: 57
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功