`
huibin
  • 浏览: 754356 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

使用xom实现xml文件数据的查找,删除,修改(转载)

 
阅读更多
说明:
1,程序需要安装第三方jar包,即xom的jar包可以在http://www.cafeconleche.org/XOM/找到相关下载链接进行下载
2,程序分为三部分,CreateMapXml.java是这个小demo的核心处理程序,封装了对mapdata.xml文件中相关内容的插入查找删除等行为。mapdata.xml文件的根节点为<map>,它下面是
    <mapdata>
        <positionID>1c</positionID>
        <longitude>1c</longitude>
        <latitude>1c</latitude>
    </mapdata>
大体结构就是这样的。InputGui.java是demo的界面类,并自带主函数,主要显示了输入的区域标识,经度,纬度,在输入区域标识值触发信息查找事件,如果存在匹配值则在经度纬度输入框内即可显示相关信息,添加/修改按钮也会变为修改,删除按钮可用,已完成对信息的修改,如果没有匹配内容,则按钮不可编辑,直到用户输入完整的新的id,经纬度等信息后,按钮会变为添加,其余自验吧,嘿嘿
3,直接贴代码了.....
//InputGui.java
package mapData;

import static gui.SwingConsole.run;



import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.ParsingException;
import nu.xom.ValidityException;

public class InputGui extends JFrame {
private JButton
b1 = new JButton("修改/添加"),
b2 = new JButton("删除");
private JTextField
t1 = new JTextField(20),
t2 = new JTextField(20),
t3 = new JTextField(20);
private JLabel
label1 = new JLabel("ID"),
label2 = new JLabel("经度"),
label3 = new JLabel("纬度");
private String s = "";
private UpperCaseDocument ucd1 = new UpperCaseDocument();
private UpperCaseDocument ucd2 = new UpperCaseDocument();
private UpperCaseDocument ucd3 = new UpperCaseDocument();
public InputGui() {
t1.setDocument(ucd1);
ucd1.addDocumentListener(new T1());
t2.setDocument(ucd2);
ucd2.addDocumentListener(new T2());
t3.setDocument(ucd3);
ucd3.addDocumentListener(new T2());

b1.addActionListener(new B1());

b2.addActionListener(new B2());
/*t1.addActionListener(new T1A());*/

setLayout(new GridLayout(4,2));

add(label1);
add(t1);
add(label2);
add(t2);
add(label3);
add(t3);
add(b1);
add(b2);

b1.setEnabled(false);
b2.setEnabled(false);

}

class T1 implements DocumentListener {
public void changedUpdate(DocumentEvent e) {
}

public void insertUpdate(DocumentEvent e) {
//t2.setText(t1.getText());
//t3.setText("Text: " + t1.getText());
//b1.setEnabled(false);
try {
MapBean mapMessage = (new CreateMapXml()).searchElement(t1.getText());
if((mapMessage.getLatitude()!=null)
&&(mapMessage.getLongitude()!=null)
&&(!mapMessage.getLatitude().equals(""))
&&(!mapMessage.getLongitude().equals(""))){
t2.setText(mapMessage.getLongitude());
t3.setText(mapMessage.getLatitude());
b1.setText("修改");
b1.setEnabled(false);
b2.setEnabled(true);
}else{
b1.setText("添加");
t2.setText("");
t3.setText("");
b1.setEnabled(false);
b2.setEnabled(false);
}
} catch (ValidityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParsingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

public void removeUpdate(DocumentEvent e) {
try {
MapBean mapMessage = (new CreateMapXml()).searchElement(t1.getText());
if((mapMessage.getLatitude()!=null)
&&(mapMessage.getLongitude()!=null)
&&(!mapMessage.getLatitude().equals(""))
&&(!mapMessage.getLongitude().equals(""))){
t2.setText(mapMessage.getLongitude());
t3.setText(mapMessage.getLatitude());
b1.setText("修改");
b1.setEnabled(false);
b2.setEnabled(true);
}else{
b1.setText("添加");
t2.setText("");
t3.setText("");
b1.setEnabled(false);
b2.setEnabled(false);
}
} catch (ValidityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParsingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

class T2 implements DocumentListener {
    public void changedUpdate(DocumentEvent e) {}
    public void insertUpdate(DocumentEvent e) {
     if((t1.getText()!=null)     
     &&(t2.getText()!=null)
     &&(t3.getText()!=null)
     &&(!t1.getText().equals(""))
     &&(!t2.getText().equals(""))
     &&(!t3.getText().equals(""))){
     b1.setEnabled(true);
     }
    }
    public void removeUpdate(DocumentEvent e) {
     if((t1.getText()!=null)     
     &&(t2.getText()!=null)
     &&(t3.getText()!=null)
     &&(!t1.getText().equals(""))
     &&(!t2.getText().equals(""))
     &&(!t3.getText().equals(""))){
     b1.setEnabled(true);
     }
    }
  }

class B1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String id = t1.getText();
String longitude = t2.getText();
String latitude = t3.getText();
if (b1.getText().equals("添加")){

try {
(new CreateMapXml()).doInsertElement(id, longitude, latitude);
b1.setEnabled(false);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
  
}
if(b1.getText().equals("修改")){
try {
(new CreateMapXml()).changeElement(id, longitude, latitude);
b1.setEnabled(false);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}

class B2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String id = t1.getText();
try {
(new CreateMapXml()).deleteElement(id);
b2.setEnabled(false);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
t1.setText("");
t2.setText("");
t3.setText("");
}
}

public static void main(String[] args) {
run(new InputGui(), 375, 200);
}

}

class UpperCaseDocument extends PlainDocument {
private boolean upperCase = true;

public void setUpperCase(boolean flag) {
upperCase = flag;
}

public void insertString(int offset, String str, AttributeSet attSet)
throws BadLocationException {
if (upperCase)
//str = str.toUpperCase();
super.insertString(offset, str, attSet);
}
} // /:~

//CreateMapXml.java
package mapData;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Elements;
import nu.xom.ParsingException;
import nu.xom.Serializer;
import nu.xom.ValidityException;

public class CreateMapXml {
private MapBean mapMessage = new MapBean();

private static String xmlRoot = "map";    //xml文件的root节点
private String xmlMapData="mapdata";   //对应mapdata标签
static Element root = new Element(xmlRoot);

public CreateMapXml(){}
public CreateMapXml(MapBean mapMessage){
//含有MapBean的构造函数
this.mapMessage = mapMessage;
}

public void addToRoot(Element e){
//将子标签添加到root标签下
root.appendChild(e);
}

public static void format(OutputStream os, Document doc) throws Exception {
//格式化xml文件书写格式,如缩进等
Serializer serializer = new Serializer(os, "UTF-8");
serializer.setIndent(4);
//设置不同级别标签间的缩进长度
serializer.setMaxLength(100);
//设置每行默认最大长度
serializer.write(doc);
//将文档写入输出流
serializer.flush();
}

public Element insertElement(MapBean mapMessage){
//向骨架中插入positionID,longitude,latitude标签及元素
Element mapdata = new Element(xmlMapData);
//声明三个标签的父标签

Element positionIDEle = new Element(MapBean.POSITIONID);
positionIDEle.appendChild(mapMessage.getPositionID());
//声明positionID标签并添加内容
Element longitudeEle = new Element(MapBean.LONGITUDE);
longitudeEle.appendChild(mapMessage.getLongitude());
//声明longitude标签并添加内容
Element latitudeEle = new Element(MapBean.LATITUDE);
latitudeEle.appendChild(mapMessage.getLatitude());
//声明latitude标签并添加内容

mapdata.appendChild(positionIDEle);
mapdata.appendChild(longitudeEle);
mapdata.appendChild(latitudeEle);
//将三个标签与其父标签关联
return mapdata;
}


public Element insertElement(String positionID, String longitude, String latitude){
MapBean mapMessage = new MapBean( positionID, longitude, latitude);
//调用insertElement(MapBean)
Element mapdata = insertElement(mapMessage);
return mapdata;
}

public void doInsertElement(String positionID, String longitude, String latitude) throws Exception{
//封装insertElement(),提高内聚性

Element e = this.insertElement(positionID, longitude, latitude);
//将xml结构的MapBean实例写入Element,形成一个元素树块,相当于一个子块
Builder builder = new Builder();
    Document doc = builder.build("mapdata.xml");
    //通过Builder获取xml文件的Document实例
    Element root = doc.getRootElement();
    //获得该xml文件的根节点
    root.insertChild(e, 1);
    //在根节点处插入Element实例

    CreateMapXml.format(System.out, doc);
    //格式化并在控制台输出
    CreateMapXml.format(new BufferedOutputStream(new FileOutputStream("mapdata.xml")), doc);
    //格式化到输出流里写入文件
}
public void doInsertElement(MapBean mapMessage) throws Exception{
//封装insertElement(),提高内聚性
this.doInsertElement(mapMessage.getPositionID(), mapMessage.getLongitude(), mapMessage.getLatitude());
}

public void changeElement(String positionID, String longitude, String latitude) throws Exception{
//将符合positionID的相关信息更改longitude和latitude
Builder builder = new Builder();
    Document doc = builder.build("mapdata.xml");
    //通过Builder从文件中获取xml文件的Document实例
    Element root = doc.getRootElement();
    //获得该xml文件的根节点
Elements mapdatas = root.getChildElements();
//获取子节点集
for(int i=0; i<mapdatas.size(); i++){
Element e = mapdatas.get(i);
//获取子节点集对应序列的节点对象
Element eleTemp = e.getFirstChildElement("positionID");
//System.out.println(e.getLocalName());
//System.out.println(ele.getValue());
if(eleTemp.getValue().equals(positionID)){
//这个方法太笨了,有待改进...
eleTemp = e.getFirstChildElement("longitude");
eleTemp.removeChild(0);
eleTemp.appendChild(longitude);
//将原有经度数据去除并添加新数据
eleTemp = e.getFirstChildElement("latitude");
eleTemp.removeChild(0);
eleTemp.appendChild(latitude);
//将原有纬度数据去除并添加新数据
}

//System.out.println(ele.getValue());
}
CreateMapXml.format(System.out, doc);
    //格式化并在控制台输出
    CreateMapXml.format(new BufferedOutputStream(new FileOutputStream("mapdata.xml")), doc);
    //格式化到输出流里并写入文件
}
public void deleteElement(String positionID) throws Exception{
//将符合positionID的相关信息删除信息
Builder builder = new Builder();
    Document doc = builder.build("mapdata.xml");
    //通过Builder从文件中获取xml文件的Document实例
    Element root = doc.getRootElement();
    //获得该xml文件的根节点
Elements mapdatas = root.getChildElements();
//获取子节点集
for(int i=0; i<mapdatas.size(); i++){
Element e = mapdatas.get(i);
//获取子节点集对应序列的节点对象
Element eleTemp = e.getFirstChildElement("positionID");
//System.out.println(e.getLocalName());
//System.out.println(ele.getValue());
if(eleTemp.getValue().equals(positionID)){
e.removeChildren();
root.removeChild(e);
break;
}
}
CreateMapXml.format(System.out, doc);
    //格式化并在控制台输出
    CreateMapXml.format(new BufferedOutputStream(new FileOutputStream("mapdata.xml")), doc);
    //格式化到输出流里并写入文件
}
public MapBean searchElement(String positionID) throws ValidityException, ParsingException, IOException{
//查询符合positionID的相关信息

MapBean mapMessage = new MapBean();

Builder builder = new Builder();
    Document doc = builder.build("mapdata.xml");
    //通过Builder从文件中获取xml文件的Document实例
    Element root = doc.getRootElement();
    //获得该xml文件的根节点
Elements mapdatas = root.getChildElements();
//获取子节点集

for(int i=0; i<mapdatas.size(); i++){
Element e = mapdatas.get(i);
//获取子节点集对应序列的节点对象
Element eleTemp = e.getFirstChildElement("positionID");
//System.out.println(e.getLocalName());
//System.out.println(ele.getValue());
if(eleTemp.getValue().equals(positionID)){
mapMessage.setPositionID(eleTemp.getValue());
eleTemp = e.getFirstChildElement("longitude");
mapMessage.setLongitude(eleTemp.getValue());
eleTemp = e.getFirstChildElement("latitude");
mapMessage.setLatitude(eleTemp.getValue());
break;
}
}
//将返回结果存入MapBean对象内
return mapMessage;

}

}

//: net/mindview/util/SwingConsole.java
// Tool for running Swing demos from the
// console, both applets and JFrames.
package gui;
import javax.swing.*;

public class SwingConsole {
  public static void
  run(final JFrame f, final int width, final int height) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        f.setTitle(f.getClass().getSimpleName());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(width, height);
        f.setVisible(true);
      }
    });
  }
} ///:~
o了,刚开始写技术性文章,有些乱,见谅... <!--v:3.2-->
分享到:
评论

相关推荐

    使用xom处理xml文档的demo源码

    本教程通过一个简单的“使用XOM处理XML文档的demo源码”实例,旨在帮助开发者了解如何利用XOM库进行XML文档的操作,如查找、插入、删除和修改。 首先,让我们详细了解XOM库的特点。XOM库设计的核心理念是消除DOM...

    xom-1.2.7 xml

    - **配置文件**:许多软件使用XML格式的配置文件,XOM可用于读取和修改这些文件。 - **数据交换**:在不同系统间,XML作为标准的数据交换格式,XOM提供了处理这种数据的工具。 通过学习和使用XOM,开发者可以更...

    xom-1.2.6,Java编程思想上提到的解析XML文件的工具

    在《Java编程思想》这本书中,作者Bruce Eckel深入探讨了如何使用XOM来有效地处理XML数据,强调了其在XML解析中的优势和特点。XOM作为一个高质量的XML API,旨在提供一种简单、类型安全且易于使用的接口,以便开发...

    java se开发的xom,xml-rpc及oracle、sql2008数据库连接包

    XOM(eXtremely Object-Oriented XML Library)是一个用于Java的XML解析库,它的设计目标是提供一种高效、易于使用且类型安全的方式来处理XML文档。XOM提供了一种树型结构来表示XML文档,使得开发者能够通过对象方法...

    nu.xom xom xom.jar -1.2.3

    通过使用XOM,开发者可以创建、修改和查询XML文档,而无需担心内存消耗和性能瓶颈。 在“nu.xom xom xom.jar -1.2.3”这个压缩包中,包含了XOM库的源代码和编译后的JAR文件。`xom.jar`是XOM库的可执行版本,可以...

    xom 1.2,一个开源的XML java类库

    - **修改XML**:通过修改树状结构中的元素、属性和文本,可以实现XML的修改。 - **序列化XML**:使用`XMLWriter`类,可以将XML树写入输出流或字符串,生成XML格式的数据。 **总结** XOM 1.2作为一个强大的XML处理...

    xom-1.1.jar包

    通过这个对象树,开发者可以直接访问和修改XML结构,如获取元素、属性值,或者添加、删除节点,从而实现对XML文档的精细操作。XOM库还支持XPath查询,允许开发者通过表达式快速定位到XML文档的特定部分。 然而,...

    xom-1.3.4 _www.4huh59.xom_www.4hudd30..xom_www.3DGayWorlds.xom_x

    XML使用自定义的标签来定义数据结构,允许用户创建自己的元素和属性,具有良好的可扩展性和灵活性。 XOM库则是Java中一个高质量的XML API,它提供了一种简单、类型安全且无XML解析器API暴露的编程模型。XOM库的设计...

    xom jar包 xml用的

    xom jar包 xml用的,自己用的,thank csdn!

    java对xml操作的项目案例

    本项目案例“java对xml操作的项目案例”深入探讨了如何使用Java来读取、修改和写入XML文件。下面将详细阐述相关知识点。 一、Java与XML的交互 1. DOM解析器:Document Object Model (DOM) 是一种将整个XML文档加载...

    Java实现XML解析【JDom】

    Java中的XML解析是处理XML数据的关键技术,JDom是一个高效的、纯Java的XML处理库,它为Java开发者提供了便捷的方式来创建、修改和读取XML文档。在这个资源中,我们将探讨如何利用JDom来解析XML文件,并从MySQL数据库...

    xom-1.1.jar.zip

    在描述中提到的错误“找不到nu.xom.Serializer这个类”,这表明在尝试使用XOM库进行XML序列化时,系统的类路径中没有包含XOM库,具体来说就是缺少了"xom-1.1.jar"这个依赖。 "nu.xom.Serializer"是XOM库中的一个...

    Excel转xml

    - 写入XML文件:使用XOM或其他XML库,将创建的XML结构写入文件。 6. **注意事项**: - 数据类型转换:Excel可能包含数字、日期、字符串等不同类型的单元格,转换时需考虑这些类型在XML中的表示。 - 处理样式和...

    xom api ,demo,document

    XOM(XML Object Model)是Java中用于处理XML文档的一个库,由James Clark开发,它提供了一种高效、类型安全且易于使用的API来操作XML。XOM的主要目标是解决DOM(Document Object Model)的一些常见问题,如性能和...

    xom-1.2.9.jar (XML解析工具)

    xom 是一款XML解析器,它提供了一套非常省力的API,对Xml进行解析和操作。 导入Eclipse方法: 1.右键Eclipse中的工程,选择Build Path-&gt;Configure Build Path 2.选择Add External Jar,选择xom-1.2.9.jar即可

    spring中的BeanFactory解析xml文件

    2. **解析XML**:`XmlBeanDefinitionReader`使用DOM解析器(如XOM、JDOM或DOM4J)解析XML文件,生成DOM树。然后,它遍历DOM树,对每个元素生成一个`BeanDefinition`对象。 3. **注册BeanDefinition**:解析后的Bean...

    Java解析XML.zip

    Jaxen是一个独立于XML解析器的XPath实现,它允许你在各种不同的XML API(如DOM、DOM4J、JDOM、XOM等)之间使用相同的XPath表达式。Jaxen的主要作用在于提供一个统一的接口,使得开发者不必关心底层的XML解析器,只需...

    xom-1.2.1.jar

    这个jar是有关xml解析用的 其中主要是使用Json-lib转换数据格式时候的依赖包 网上要求是nu.xom包就在这个jar文件中 可以实现java各种集合数据和json数据的格式转换以及xml格式数据和json数据的格式互换

    XML文档解析相关工具

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件以及Web服务等场景。在Java程序开发中,处理XML文档时,我们常常会用到一些库来帮助解析和操作XML。本话题将详细介绍两个...

    xom-1.1.jar

    xml转json时的依赖包, Size: 421.45 KB Detail: META-INF/ META-INF/MANIFEST.MF 1.15 KB nu/ nu/xom/ nu/xom/ASCIIWriter.class 499.0 bytes nu/xom/Attribute$Type.class 2.04 KB nu/xom/...

Global site tag (gtag.js) - Google Analytics