使用 dom4j 解析 XML

使用 dom4j 解析 XML

1.生成一个XML文件:

public   void  generateDocument()  ... {
        
/** */ /**
         * 使用 DocumentHelper 类创建一个文档实例。 
         * DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。
         
*/

        Document document 
=  DocumentHelper.createDocument();
        
/** */ /**
         * 使用 addElement() 方法创建根元素 catalog 。 
         * addElement() 用于向 XML 文档中增加元素。
         
*/

        Element catalogElement 
=  document.addElement( " catalog " );
        
/** */ /**
         * 在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。 
         
*/

        catalogElement.addComment(
" An XML catalog " );
        
/** */ /**
         * 在 catalog 元素中使用 addElement() 方法增加 journal 元素。
         
*/

        Element journalElement 
=  catalogElement.addElement( " journal " );
        
/** */ /**
         * 使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。
         
*/

        journalElement.addAttribute(
" title " " XML Zone " );
        journalElement.addAttribute(
" publisher " " IBM developerWorks " );

        
/** */ /**
         * 向 article 元素中添加 journal 元素。 
         
*/

        Element articleElement 
=  journalElement.addElement( " article " );
        
/** */ /**
         * 为 article 元素增加 level 和 date 属性。 
         
*/

        articleElement.addAttribute(
" level " " Intermediate " );
        articleElement.addAttribute(
" date " " December-2001 " );
        
/** */ /**
         * 向 article 元素中增加 title 元素。 
         
*/

        Element titleElement 
=  articleElement.addElement( " title " );
        
/** */ /**
         * 使用 setText() 方法设置 article 元素的文本。 
         
*/

        titleElement.setText(
" Java configuration with XML Schema " );
        
/** */ /**
         * 在 article 元素中增加 author 元素。 
         
*/

        Element authorElement 
=  articleElement.addElement( " author " );
        
/** */ /**
         * 在 author 元素中增加 firstname 元素并设置该元素的文本。 
         
*/

        Element firstNameElement 
=  authorElement.addElement( " firstname " );
        firstNameElement.setText(
" Macello " );
        
/** */ /**
         * 在 author 元素中增加 lastname 元素并设置该元素的文本。 
         
*/

        Element lastNameElement 
=  authorElement.addElement( " lastname " );
        lastNameElement.setText(
" Vitaletti " );

        
try   ... {
            XMLWriter output 
=   new  XMLWriter( new  FileWriter( new  File(
                    
" demo/catalog.xml " )));
            output.write(document);
            output.close();
        }
  catch  (IOException e)  ... {
            e.printStackTrace();
        }

}

生成的XML文件如下所示:

<? xml version="1.0" encoding="UTF-8" ?>
< catalog >
<!-- An XML catalog -->
    
< journal  title ="XML Zone"  publisher ="IBM developerWorks" >
        
< article  level ="Intermediate"  date ="December-2001" >
            
< title > Java configuration with XML Schema </ title >
            
< author >
                
< firstname > Macello </ firstname >
                
< lastname > Vitaletti </ lastname >
            
</ author >
        
</ article >
    
</ journal >
</ catalog >


2.读取该文件,输出firstname和lastname:

public   void  outPutInfo(String filename) ... {
        
try   ...
            File f 
=   new  File(filename); 
            SAXReader reader 
=   new  SAXReader(); 
            Document doc 
=  reader.read(f); 
            
            List list 
=  doc.selectNodes( " //article " );
            Iterator iter 
=  list.iterator();
            
            
while  (iter.hasNext())  ... {
                Element element 
=  (Element) iter.next();
                Element nameElement 
=   null ;
                Iterator iterator 
=  element.elementIterator( " author " );
                
while  (iterator.hasNext())  ... {
                    nameElement 
=  (Element) iterator.next();
                    System.out.println(nameElement.elementText(
" firstname " ));
                    System.out.println(nameElement.elementText(
" lastname " ));
                }

            }

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


3.修改该文件;

public   void  modifyDocument(String filename)  ... {
        
try   ... {
            File inputXml 
=   new  File(filename);
            
            SAXReader saxReader 
=   new  SAXReader();
            Document document 
=  saxReader.read(inputXml);

            
/** */ /**
             * inputXml 是从 catalog.xml 创建的 java.io.File。
             * 使用 XPath 表达式从 article 元素中获得 level 节点列表。
             * 如果 level 属性值是“Intermediate”则改为“Introductory”。 
             
*/

            List list 
=  document.selectNodes( " //article/@level " );
            Iterator iter 
=  list.iterator();
            
while  (iter.hasNext())  ... {
                Attribute attribute 
=  (Attribute) iter.next();
                
if  (attribute.getValue().equals( " Intermediate " ))
                    attribute.setValue(
" Introductory " );
            }


            list 
=  document.selectNodes( " //article/@date " );
            iter 
=  list.iterator();
            
while  (iter.hasNext())  ... {
                Attribute attribute 
=  (Attribute) iter.next();
                
if  (attribute.getValue().equals( " December-2001 " ))
                    attribute.setValue(
" October-2002 " );

            }

            
            
/** */ /**
             * 获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。 
             
*/

            list 
=  document.selectNodes( " //article " );
            iter 
=  list.iterator();
            
while  (iter.hasNext())  ... {
                Element element 
=  (Element) iter.next();
                Iterator iterator 
=  element.elementIterator( " title " );
                
while  (iterator.hasNext())  ... {
                    Element titleElement 
=  (Element) iterator.next();
                    
if  (titleElement.getText().equals(
                            
" Java configuration with XML Schema " ))
                        titleElement
                                .setText(
" Create flexible and extensible XML Schema " );

                }

            }


            list 
=  document.selectNodes( " //article/author " );
            iter 
=  list.iterator();
            
while  (iter.hasNext())  ... {
                Element element 
=  (Element) iter.next();
                Iterator iterator 
=  element.elementIterator( " firstname " );
                
while  (iterator.hasNext())  ... {
                    Element firstNameElement 
=  (Element) iterator.next();
                    
if  (firstNameElement.getText().equals( " Marcello " ))
                        firstNameElement.setText(
" Ayesha " );
                }

            }


            list 
=  document.selectNodes( " //article/author " );
            iter 
=  list.iterator();
            
while  (iter.hasNext())  ... {
                Element element 
=  (Element) iter.next();
                Iterator iterator 
=  element.elementIterator( " lastname " );
                
while  (iterator.hasNext())  ... {
                    Element lastNameElement 
=  (Element) iterator.next();
                    
if  (lastNameElement.getText().equals( " Vitaletti " ))
                        lastNameElement.setText(
" Malik " );

                }


            }

            XMLWriter output 
=   new  XMLWriter( new  FileWriter( new  File(
                    
" catalog-modified.xml " )));
            output.write(document);
            output.close();
        }
  catch  (DocumentException e)  ... {
            System.out.println(e.getMessage());
        }
  catch  (IOException e)  ... {
            System.out.println(e.getMessage());
        }

    }
更新后的XML文件 内容如下所示:
<? xml version="1.0" encoding="UTF-8" ?>
< catalog >
<!-- An XML catalog -->
    
< journal  title ="XML Zone"  publisher ="IBM developerWorks" >
        
< article  level ="Introductory"  date ="October-2002" >
            
< title > Create flexible and extensible XML Schema </ title >
            
< author >
                
< firstname > Macello </ firstname >
                
< lastname > Malik </ lastname >
            
</ author >
        
</ article >
    
</ journal >
</ catalog >

你可能感兴趣的:(使用 dom4j 解析 XML)