0
点赞
收藏
分享

微信扫一扫

web开发总结----xml的写入、读取---2

静悠 2023-05-05 阅读 58

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对象相关

1.读取XML文件,获得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 条评论