解析xml
1. Xml文件的解析器目前分为两种:DOM(Document Object Model)和SAX。
2. 以前这两个解析器都学过,现在巩固一下DOM,因为解析xml文件实在是太重要了。
3. 我估计Hibernate就是解析xml配置文件,然后,把这个文件中的表名与类名、各类字段与表字段关系存在两个map(name/column和column/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();
}
}
}