JAVA读取XML文件并解析 以及 JAVA生成文本文件输出

时间:2022-11-09 11:52:56

    废话不多说,直接上代码及说明吧!

package Dao;
import java.io.File;
import java.util.ArrayList;
import java.util.List;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class ReadXML {
private String fileName;
public ReadXML(String fileName)
{
this.fileName = fileName; //构造函数,直接将需要读取的fileName通过函数初始化进行传值,当然你也可以使用其他方法!
}
public List<String> redaXml()
{
ArrayList<String> elementRefArray = new ArrayList<String>(); //这是一个ArrayList 容器,用于存储多出来的信息
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document doc = db.parse(new File(this.fileName));
NodeList nodes = doc.getElementsByTagName("elementName"); //从xml文件中读出名为elementName的节点,放在nodes中,假如你的xml有很多这个节点,都会被存下来
for (int i = 0; i < nodes.getLength(); i++)
{
Element ele = (Element)nodes.item(i); //Element 是将节点变为元素具体我还有点乱,<nodes.item(i)返回的是Node变量,那个里面没有方法可以获得指定节点属性,所以将其强制转换层Element获得某个节点的属性的参数值,当然你假如需要获得的是节点值,就需要用Node,然后使用node.getNodeValue() 就可以了
elementRefArray.add(ele.getAttribute("href");//获得名为href的属性值}}catch(Exception e){e.printStackTrace();}return elementRefArray;}}上面说的xml节点属性值和xml节点值,举例如下<node name=“xxxx”>YYYY</node>

其中name 为node 的属性,XXXX为node属性为name的值,而YYYY为node节点的值(不知小弟说法是否正确,不过和上面对应正确··)


Ok 搞好解析XML后,大多数情况下,我们需要对其值进行操作,所以上面的代码我把它放在一个ArrayList中,方便后续操作。操作好后,可能你又需要进行文件保存,所以下面的代码是文件保存的一种方法。。。

 private static String path = "D:/loadReplace.js";  // 文件保存路径和名称
private static File filename = new File(path);

public creat() throws IOException
{
RandomAccessFile ss = null;
String str = "把我写进去!";if (!filename.exists()) {               filename.createNewFile();   //创建文件           try {            ss= new RandomAccessFile(filename, "rw");            ss.writeBytes(str);   //写文件        } catch (IOException e1) {            // TODO 自动生成 catch 块            e1.printStackTrace();        } finally {            if (ss!= null) {                try {                    ss.close();         //关闭文件                    System.out.println("创建结束");                } catch (IOException e2) {                    // TODO 自动生成 catch 块                    e2.printStackTrace();                }            }        }
}