`
java-admin
  • 浏览: 1381905 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

java 操作xml 读取,修改,追加

阅读更多

import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.SAXException;

public class XMLFile {
 private static Document document;
 private static String filename;

 @SuppressWarnings("static-access")
 public XMLFile(String filename) throws ParserConfigurationException {
  this.filename = filename;
  this.document = getDocument();
 }

 public static Document getDocument() throws ParserConfigurationException {
  return loadXml();
 }

 /**
  * 得到xml文档
  *
  * @param filename
  * @return
  * @throws ParserConfigurationException
  */
 public static Document loadXml() throws ParserConfigurationException {
  Document document = null;
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  File file = new File(filename);
  if (file.exists()) {
   try {
    document = builder.parse(filename);
    document.normalize();
   } catch (SAXException ex) {
    ex.printStackTrace();
   } catch (IOException ex) {
    ex.printStackTrace();
   }
  }

  return document;
 }

 /**
  * 修改某个节点的内容,将 nodeName 的值修改为newNodeValue
  *
  * @param nodeName
  * @param newNodeValue
  * @throws ParserConfigurationException
  */
 public static void xmlUpdate(String nodeName, String newNodeValue)
   throws ParserConfigurationException {
  Node root = document.getDocumentElement();
  /** 如果root有子元素 */
  if (root.hasChildNodes()) {
   /** ftpnodes */
   NodeList ftpnodes = root.getChildNodes();
   /** 循环取得ftp所有节点 */
   for (int i = 0; i < ftpnodes.getLength(); i++) {
    NodeList ftplist = ftpnodes.item(i).getChildNodes();
    for (int k = 0; k < ftplist.getLength(); k++) {
     Node subnode = ftplist.item(k);
     if (subnode.getNodeType() == Node.ELEMENT_NODE
       && subnode.getNodeName() == nodeName) {
      subnode.getFirstChild().setNodeValue(newNodeValue);
     }
    }

   }
  }
  xml2File();
 }

 public static void xmlUpdateAppend(String code, String name, String time,
   String info) throws ParserConfigurationException {
  Node root = document.getDocumentElement();
  /** 如果root有子元素 */
  if (root.hasChildNodes()) {
   Node node = document.getElementsByTagName("weather-" + code)
     .item(0);
   if (node == null) {
    Node newChild = createNode(root, code, name, time, info);
    root.appendChild(newChild);
   }
  }
  xml2File();
 }

 /**
  * 写入xml文件
  *
  * @param code
  * @param time
  * @param info
  * @throws ParserConfigurationException
  */
 public static void xmlWrite(String code, String name, String time,
   String info) throws ParserConfigurationException {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  document = builder.newDocument();
  Element root = document.createElement("weather");
  document.appendChild(root);

  createNode(root, code, name, time, info);

  xml2File();
 }

 public static Node createNode(Node root, String code, String name,
   String time, String info) {

  Element weatherCode = document.createElement("weather-" + code);
  weatherCode.setAttribute("value", code);
  root.appendChild(weatherCode);

  Element weatherName = document.createElement("name-" + code);
  weatherName.appendChild(document.createTextNode(name));
  weatherCode.appendChild(weatherName);

  Element weatherTime = document.createElement("time-" + code);
  weatherTime.appendChild(document.createTextNode(time));
  weatherCode.appendChild(weatherTime);

  Element weatherInfo = document.createElement("info-" + code);
  weatherInfo.appendChild(document.createTextNode(info));
  weatherCode.appendChild(weatherInfo);

  return weatherCode;
 }

 /**
  * 读取某个节点的内容
  *
  * @param nodename
  * @return
  */
 public String readNode(String nodename) {
  Node node = document.getElementsByTagName(nodename).item(0);
  return node.getTextContent();
 }

 /**
  * 读取某个节点的属性
  *
  * @param nodename
  * @param itemname
  * @return
  */
 public String readAttribute(String nodename, String itemname) {
  Node node = document.getElementsByTagName(nodename).item(0);
  return node.getAttributes().getNamedItem(itemname).getTextContent();
 }

 public String parseString(String str, String nodename, String itemname) {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder dber;
  try {
   dber = factory.newDocumentBuilder();
   str = "<xroot>" + str + "</xroot>";
   ByteArrayInputStream bais = null;
   try {
    bais = new ByteArrayInputStream(str.getBytes("UTF-8"));
    Document docf;
    try {
     docf = dber.parse(bais);
     Node node = docf.getElementsByTagName(nodename).item(0);
     return node.getAttributes().getNamedItem(itemname)
       .getTextContent();
    } catch (IOException ex) {
     ex.printStackTrace();
    } catch (SAXException ex) {
     ex.printStackTrace();
    }

   } catch (UnsupportedEncodingException uee) {
    uee.printStackTrace();
   }
  } catch (ParserConfigurationException ex) {
   ex.printStackTrace();
  }
  return "";
 }

 /**
  * 将xml文件保存成文件
  */
 public static void xml2File() {
  try {
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   DOMSource source = new DOMSource(document);
   transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
   transformer.setOutputProperty(OutputKeys.INDENT, "yes");
   PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
   StreamResult result = new StreamResult(pw);
   transformer.transform(source, result);
  } catch (TransformerException mye) {
   mye.printStackTrace();
  } catch (IOException exp) {
   exp.printStackTrace();
  }
 }

 public static void main(String[] args) {
  try {
   
   XMLFile xf = new XMLFile("./res/xml/weather-info.xml");
   if (xf.getDocument() == null) {
    // xf.xmlWrite("57038", "200898877", "43243143");
   }

   // xf.toUpdate("57038", "200898877", "43243143");
   Document d = xf.loadXml();
   System.out.println(d);
   // System.out.println();
   System.out.println("ok");
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
}

分享到:
评论

相关推荐

    Java中XML配置文件的读取(sax).doc

    Java中XML配置文件的读取(SAX) XML配置文件是Java开发中常用的配置文件格式,特别是在J2EE项目中。XML文件可以存储配置信息,并且易于维护和修改。然而,在Java中读取XML配置文件成了一个需要解决的问题。本文将...

    java http 发送xml报文

    - **接收响应**:通过`BufferedReader`读取服务器的响应,将读取的每一行追加到`StringBuffer`中,最后打印出来。 ### 三、代码优化与安全建议 虽然示例代码实现了基本功能,但在实际生产环境中,还需要考虑以下几...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java_IO操作_(读写、追加、删除、移动、复制、修改)

    本文将详细介绍Java中进行文件基础操作的方法,包括读取、追加、删除、移动、复制以及修改文件的具体实现。 #### 一、读取文件内容 文件读取是文件操作中最常见的需求之一。Java提供了多种方式来读取文件内容,...

    xml文件的操作,包括xml文件读写,添加删除结点等

    此外,对于更复杂的XML操作,如查找特定节点、修改节点属性等,`ElementTree`库提供了丰富的API。例如,可以使用`find()`、`findall()`或`iter()`方法查找满足条件的节点: ```python # 查找节点 found_node = root...

    java对csv文件进行读写操作

    下面我们将详细探讨如何使用Java和`javacsv`库对CSV文件进行读写操作。 **1. 添加javacsv依赖** 在进行读写操作前,你需要将`javacsv.jar`添加到项目类路径中。如果是Maven项目,可以将依赖项添加到pom.xml文件中...

    xml修改读取

    本文将详细讲解如何在Java环境中进行XML的读取、修改和追加操作。 首先,理解XML的基本结构是至关重要的。XML文档由一系列元素组成,元素之间有嵌套关系,通过标签来定义数据类型。例如: ```xml &lt;title&gt;Java...

    20081215-文件读写与XML.rar

    文件读写是编程中的重要技能,无论是在Windows、Linux还是Mac OS等操作系统中,都需要进行文件的创建、读取、修改和删除等操作。在Python中,可以使用内置的`open()`函数来处理文件,它支持多种模式,如'w'(写入)...

    android xml文件操作

    在Android开发中,XML文件操作是一项基础且重要的技能,它涉及到应用程序的数据存储、配置设置以及UI布局设计。本文将深入探讨Android中XML文件的读写、TXT文件操作、MD5加密以及如何利用百度地图API计算两点之间的...

    Java使用jaudiotagger批量修改MP3、FLAC标签tag标题信息

    Java使用jaudiotagger批量修改MP3、FLAC标签tag标题信息; 可跳转至https://blog.csdn.net/qq1170993239/article/details/130726976详细介绍

    【经典】ini regedit xml text基本操作

    读取文本文件通常涉及打开文件,逐行读取,而写入则是将数据追加或覆盖到文件中。大多数编程语言都有内置的文件I/O函数,如Python的`open()`函数,C++的`fstream`类,或Java的`BufferedReader`和`BufferedWriter`。 ...

    xml,TXT文件操作大全

    在这个“XML、TXT文件操作大全”中,我们将深入探讨这两类文件的创建、读取、修改和解析等核心操作。 1. **XML文件操作** - **创建XML文件**:XML文件可以通过编程语言如Python、Java、C#等创建,通过写入XML元素...

    java中对文件操作大全

    如标题“Java中文件操作大全”所示,其中一个示例方法`getInputMessage()`用于从控制台读取用户输入的信息。此方法通过`System.in`流读取字节数据,然后将其转换为字符数组,再由字符数组构建字符串返回。然而,该...

    java操作hdfs.rar

    此外,你还需要修改配置文件,例如`core-site.xml`和`hdfs-site.xml`,以确保它们与你的本地HDFS集群设置相匹配,例如命名节点(NameNode)地址和端口。 在描述中提到,有五个示例文档涉及SpringBoot的使用。...

    大数据-java操作HDFS基本操作

    在大数据领域,Java被广泛用于开发和操作分布式文件系统,如Hadoop的HDFS(Hadoop Distributed File System)。本文将详细讲解如何使用Java API进行HDFS的基本操作,包括增、删、查等常见任务。 首先,理解HDFS是至...

    Java操作csv文件

    本文将深入探讨如何使用Java语言来操作CSV文件,包括读取、写入以及处理CSV数据。 首先,Java并没有内置的库直接支持CSV操作,但我们可以借助第三方库,如Apache Commons CSV、OpenCSV或Java 8引入的java.util.CSV ...

    读取和存储数据

    在IT领域,数据的读取和存储是至关重要的基础操作,尤其在开发应用程序时。"读取和存储数据"这个程序旨在实现从不同来源获取数据并将其保存到特定文档的功能。接下来,我们将深入探讨相关知识点。 1. **数据读取**...

    Java API操作Hadoop文件

    这篇博文“Java API操作Hadoop文件”可能是关于如何利用Java代码来读取、写入、管理和操作存储在Hadoop集群上的数据。由于没有具体的描述,我将根据一般实践来讲解这个主题。 首先,你需要引入Hadoop的相关库到你的...

    HDFS的JAVA接口API操作实例

    2. **文件追加**:HDFS不支持原生的文件追加操作,但可以通过重新打开文件并定位到末尾来实现。 3. **文件复制**:可以使用`copyToLocalFile()`或`copyFromLocalFile()`方法在HDFS与本地文件系统之间进行复制。 4....

Global site tag (gtag.js) - Google Analytics