解析xml

来源:互联网 发布:地磁场飞行器知乎 编辑:程序博客网 时间:2024/04/25 17:58
 

解析xml

1.      Xml文件的解析器目前分为两种:DOM(Document Object Model)SAX

2.      以前这两个解析器都学过,现在巩固一下DOM,因为解析xml文件实在是太重要了。

3.      我估计Hibernate就是解析xml配置文件,然后,把这个文件中的表名与类名、各类字段与表字段关系存在两个mapname/columncolumn/name名值对)中,这样,就可以通过反射来拼接相应的sql语句,也可以通过反射来对相应的bean对象封装。

4.      下面给出解析xml文件的示例:

1)      在写了个xml文件,放在src文件下:

   Report.hbm.xml:

    <?xml version="1.0" encoding="utf-8"?>

    <hibernate-mapping>

        <class name="highhearted.bo.report.Report" table="report">

           <id name="reportId" column="report_id">

               <generator class="native" />

           </id>

      

           <property name="brief" />

           <property name="content"/>

           <property name="createTime" column="create_time"/>

           <property name="updateTime" column="update_time"/>

           <property name="status"/>

        </class>

    </hibernate-mapping>

2)    写个测试类:

   TestXmlHandler

    public class TestXmlHandler {

    public static void main(String[] args){

       Map nametocolumnmap = new HashMap();

       Map columntonamemap = new HashMap();

       try {

           DocumentBuilderFactory dbf =                                           DocumentBuilderFactory.newInstance(); 

           DocumentBuilder db = dbf.newDocumentBuilder();

          

           Document doc = db.parse("src//Report.hbm.xml");

           Element root = doc.getDocumentElement();

           NodeList classes = root.getElementsByTagName("class");

           Element oneClass = (Element)classes.item(0);

           NodeList properties = oneClass.getElementsByTagName("property");

           for(int i = 0; i < properties.getLength(); i++){

              Element element = (Element)properties.item(i);

              String name = element.getAttribute("name");

              String column = element.getAttribute("column");

              if(column.equals("")){

                  column = name;

              }

              nametocolumnmap.put(name, column);

              columntonamemap.put(column, name);

           }

          

           Set set = nametocolumnmap.keySet();

           Iterator iterator = set.iterator();

           while(iterator.hasNext()){

              String name = (String)iterator.next();

              String column = (String)nametocolumnmap.get(name);

              System.out.println("name : " + name +"/t" + "column : " + column);

           }  

       } catch (ParserConfigurationException e) {

           e.printStackTrace();

       }

       catch (SAXException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }

      

    }

}