dom4j读写xml文件 (转)

 

首先我们给出一段示例程序:

1.读取XML文件,获得document对象.

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

import  org.dom4j.Document;
import  org.dom4j.DocumentHelper;
import  org.dom4j.Element;
import  org.dom4j.io.OutputFormat;
import  org.dom4j.io.SAXReader;
import  org.dom4j.io.XMLWriter;

public   class  DOM4JTest  {

    
/** */
    
/** */
    
/** */
    
/**
     * DOM4J读写XML示例
     * 
     * 
@param args
     * 
@throws Exception
     
*/

    
public static void main(String[] args) {
        
try {
            XMLWriter writer 
= null;// 声明写XML的对象
            SAXReader reader = new SAXReader();

            OutputFormat format 
= OutputFormat.createPrettyPrint();
            format.setEncoding(
"GBK");// 设置XML文件的编码格式

            String filePath 
= "d://student.xml";
            File file 
= new File(filePath);
            
if (file.exists()) {
                Document document 
= reader.read(file);// 读取XML文件
                Element root = document.getRootElement();// 得到根节点
                boolean bl = false;
                
for (Iterator i = root.elementIterator("学生"); i.hasNext();) {
                    Element student 
= (Element) i.next();
                    
if (student.attributeValue("sid").equals("001")) {
                        
// 修改学生sid=001的学生信息
                        student.selectSingleNode("姓名").setText("王五");
                        student.selectSingleNode(
"年龄").setText("25");

                        writer 
= new XMLWriter(new FileWriter(filePath), format);
                        writer.write(document);
                        writer.close();
                        bl 
= true;
                        
break;
                    }

                }

                
if (bl) {
                    
// 添加一个学生信息
                    Element student = root.addElement("学生");
                    student.addAttribute(
"sid""100");
                    Element sid 
= student.addElement("编号");
                    sid.setText(
"100");
                    Element name 
= student.addElement("姓名");
                    name.setText(
"嘎嘎");
                    Element sex 
= student.addElement("性别");
                    sex.setText(
"");
                    Element age 
= student.addElement("年龄");
                    age.setText(
"21");

                    writer 
= new XMLWriter(new FileWriter(filePath), format);
                    writer.write(document);
                    writer.close();
                }

            }
 else {
                
// 新建student.xml文件并新增内容
                Document _document = DocumentHelper.createDocument();
                Element _root 
= _document.addElement("学生信息");
                Element _student 
= _root.addElement("学生");
                _student.addAttribute(
"sid""001");
                Element _id 
= _student.addElement("编号");
                _id.setText(
"001");
                Element _name 
= _student.addElement("姓名");
                _name.setText(
"灰机");
                Element _age 
= _student.addElement("年龄");
                _age.setText(
"18");

                writer 
= new XMLWriter(new FileWriter(file), format);
                writer.write(_document);
                writer.close();
            }

            System.out.println(
"操作结束! ");
        }
 catch (Exception e) {
            e.printStackTrace();
        }


    }

}


执行结果应该是这样:



循环解析节点:

private   void  getAllNodes(String xml)  {
        
try {
            Document authtmp 
= DocumentHelper.parseText(xml);
            List
<Element> list = authtmp.selectNodes("//sms/node");
            
for (int j = 0; j < list.size(); j++{
                Element node 
= (Element) list.get(j);
                nodeByNodes(node);
            }

        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }


    
private   void  nodeByNodes(Element node)  {
        
if (node.element("node"!= null{
            String id 
= node.attributeValue("id");
            String name 
= node.attributeValue("name");
            System.out.print(id 
+ "-------");
            System.out.println(name);
            
for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                Element newNode 
= (Element) i.next();
                nodeByNodes(newNode);
            }

        }
 else {
            String id 
= node.attributeValue("id");
            String name 
= node.attributeValue("name");
            System.out.print(id 
+ "-------");
            System.out.println(name);
        }

    }


其次DOM4J的解释

一.Document对象相关

      SAXReader reader =   new SAXReader();
      Document   document  =  reader.read( new  File( " input.xml " ));


2.解析XML形式的文本,得到document对象.

       String text  =   " <members></members> ";
      Document document  =  DocumentHelper.parseText(text);


3.主动创建document对象.

      Document document  = DocumentHelper.createDocument();
      Element root  =  document.addElement( " members " ); //  创建根节点


二.节点相关

1.获取文档的根节点.

      Element rootElm  =  document.getRootElement();


2.取得某节点的单个子节点.

      Element memberElm = root.element( " member " ); //  "member"是节点名


3.取得节点的文字

      String text = memberElm.getText();

也可以用:

      String text = root.elementText( " name " );

这个是取得根节点下的name字节点的文字.

4.取得某节点下名为"member"的所有字节点并进行遍历.

List nodes  =  rootElm.elements( " member ");

for  (Iterator it  =  nodes.iterator(); it.hasNext();)  {
    Element elm 
= (Element) it.next();
   // do something
}


5.对某节点下的所有子节点进行遍历.

  for (Iterator it = root.elementIterator();it.hasNext();) {
                 Element element 
= (Element) it.next();
                
// do something
             }


6.在某节点下添加子节点.

Element ageElm = newMemberElm.addElement( " age " );


7.设置节点文字.

ageElm.setText( " 29 " );


8.删除某节点.

parentElm.remove(childElm); // childElm是待删除的节点,parentElm是其父节点


9.添加一个CDATA节点.

         Element contentElm = infoElm.addElement( " content " );
         contentElm.addCDATA(diary.getContent());

            contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
            contentElm.clearContent(); //清除节点中的内容,CDATA亦可



三.属性相关.
1.取得某节点下的某属性

             Element root = document.getRootElement();    
             Attribute attribute
= root.attribute( " size " ); // 属性名name


2.取得属性的文字

             String text = attribute.getText();

也可以用:

String text2 = root.element( " name " ).attributeValue( " firstname " );

这个是取得根节点下name字节点的属性firstname的值.

3.遍历某节点的所有属性

  Element root = document.getRootElement();    
            
for (Iterator it = root.attributeIterator();it.hasNext();) {
                 Attribute attribute 
= (Attribute) it.next();
                 String text
=attribute.getText();
                 System.out.println(text);
             }


4.设置某节点的属性和文字.

newMemberElm.addAttribute( " name " , " sitinspring " );


5.设置属性的文字

             Attribute attribute = root.attribute( " name " );
             attribute.setText(
" sitinspring " );


6.删除某属性

             Attribute attribute = root.attribute( " size " ); // 属性名name
             root.remove(attribute);


四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.

XMLWriter writer = new XMLWriter( new FileWriter( " output.xml " ));
writer.write(document);
writer.close();


2.文档中含有中文,设置编码格式写入的形式.

             OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding(
" GBK " );     // 指定XML编码        
             XMLWriter writer = new XMLWriter( new FileWriter( " output.xml " ),format);
            
             writer.write(document);
             writer.close();


五.字符串与XML的转换
1.将字符串转化为XML

String text = " <members> <member>sitinspring</member> </members> " ;
Document document
= DocumentHelper.parseText(text);


2.将文档或节点的XML转化为字符串.

             SAXReader reader = new SAXReader();
             Document   document
= reader.read( new File( " input.xml " ));            
             Element root
= document.getRootElement();                
             String docXmlText
= document.asXML();
             String rootXmlText
= root.asXML();
             Element memberElm
= root.element( " member " );
             String memberXmlText
= memberElm.asXML();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LabVIEW是一种用于测量和自动化控制的编程语言和开发环境。XML是一种通用的数据格式,可以用于在不同的系统之间进行数据交换和存储。 在LabVIEW中,可以使用内置的XML库来读写XML文件。首先,使用“XML Create Document”函数创建一个新的XML文档对象,并将需要写入XML文件中的数据添加到XML文档中。然后,使用“XML Write to File”函数将XML文档写入磁盘中的XML文件。 在读取XML文件时,使用“XML Read from File”函数将XML文件读入内存中的XML文档对象中。然后,可以使用“XPath Search”函数在XML文档中查找指定的数据。 如果XML文件是较大的文件,可以考虑使用“SAX Parsing”方法。SAX Parsing是一种基于事件的解析器,它能够逐个读取XML文件中的元素,并通过事件通知机制告知LabVIEW应用程序。在LabVIEW中,可以使用“SAX Parser”和“SAX Event Handler”函数来解析XML文件。 总的来说,通过使用LabVIEW的内置XML库和相关函数,可以方便地读写XML文件,从而实现数据交换和存储。 ### 回答2: LabVIEW可以通过读写XML文件来保存和读取数据。XML文件是一种基于文本的数据存储格式,可以使用任何文本编辑器来查看和修改。 在LabVIEW中读取XML文件的流程通常为:首先使用XML文档解析器来解析XML文件,然后将解析后的数据存储在LabVIEW中的变量或者控件中。XML文档解析器可以通过NI提供的XML Toolkit来实现,该工具包含了一些用于解析XML文件的VI和面板控件。 对于读取XML文件,首先需要使用“XML文档解析器”VI创建一个XML文档解析器对象。然后,使用“解析XML字符串”VI和“从文件读取”VI将XML文件读入内存中,并传递给“XML文档解析器”VI。接着,使用“获取XML节点”VI选择需要读取的XML节点,并使用“获取XML元素属性”VI读取该节点的属性值。最后将读取的数据存储在变量或者控件中。 对于写入XML文件,首先需要使用“创建XML文档”VI创建一个XML文档对象,并使用“添加XML元素”VI在文档中添加元素和属性。然后使用“从XML文档获取字符串”VI将文档换为字符串,并使用“将字符串写入文件”VI将字符串写入磁盘上的XML文件中。 ### 回答3: LabVIEW是一种可视化编程语言,可用于读写XML文件XML是一种可扩展标记语言,用于存储和传输数据。它是一种人类可读的格式,可以将数据存储为层次结构,因此易于解析和理解。 要读取XML文件,您可以使用LabVIEW内置的XML API,如SAX解析器和DOM对象。SAX解析器是一种流解析器,逐行读取XML文件,并在每个元素开始或结束时触发事件。DOM对象则将整个XML文件加载到内存中,并允许您检索和修改节点和属性。 要写入XML文件,您可以创建一个新文件,使用基本字符串函数创建XML标记和数据,并将其写入文件。LabVIEW还提供了称为“XML属性和XML文档”的两个库。这些库允许您创建和修改XML节点和属性,并将XML文档保存到文件或字符串中。 在处理XML文件时,请记住确保文件的正确性和完整性。对于大型文件,请使用适当的流技术或缓存以避免内存问题。并始终使用错误处理来处理可能出现的问题。 总之,使用LabVIEW可以轻松地读取,解析和写入XML文件。无论您是处理配置文件,日志文件还是其他数据类型,LabVIEW提供了许多选项和库,可以满足您对XML文件的处理要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值