JDom解析xml文件

情景

解析xml配置文件,將數據庫列名和Bean的屬性映射。

jar包下載地址

DOM:jdk自帶
標準的xml解析方式,樹形加載整個xml,不適合大文件。

SAX:http://sourceforge.net/projects/sax/
事件模型xml解析方式,不需要完全加載xml,相較性能更好。

JDOM:http://jdom.org/downloads/index.html
針對java的Dom解析。

DOM4J:http://sourceforge.net/projects/dom4j/
針對java功能強大的xml解析,能夠處理大文件,性能也很好,但是很複雜。

xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<mapper name="vo.UserInfo">
    <property dbName="USER_NAME|user_name" fName="userName"/>
    <property dbName="ARCHIVE_ID|archive_id" fName="archiveID"/>
    <property dbName="USER_MOBILE|user_mobile" fName="userMobile"/>
    <property dbName="DEPT_NAME|dept_name" fName="userDept"/>
</mapper>

解析xml

注意: 開始解析之前一定要記着導jar包。

/**
 * JDom解析xml文件工具類
 *
 * @author fengzhen
 * @version v1.0, 2017/9/5 11:07
 */
public class JDomUtils {

    /**
     * 解析mapper類型xml文件
     *
     * @author fengzhen
     * @version v1.0, 2017/9/5 11:10
     */
    public static List<Map<String, String[]>> parseMapperAll(String fileName) throws JDOMException, IOException {
        ArrayList<Map<String, String[]>> result = new ArrayList<>();

        // 創建解析器build對象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 讀取xml對象
        Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
        // 獲取根節點
        Element rootElement = userMapper.getRootElement();
        // 獲取根節點下所有自己節點
        List<Element> propertys = rootElement.getChildren("property");

        for (Element property :
                propertys) {
            HashMap<String, String[]> element = new HashMap<>();
            // 解析屬性名
            String fName = property.getAttributeValue("fName");
            element.put("fName", new String[]{fName});
            // 解析數據庫名 可能存在別名
            String dbName = property.getAttributeValue("dbName");
            element.put("dbName", dbName.split("\\|"));
            result.add(element);
        }
        return result;
    }

    /**
     * 解析mapper類型xml文件
     *
     * @author fengzhen
     * @version v1.0, 2017/9/5 11:10
     */
    public static String parseMapperModel(String fileName) throws JDOMException, IOException {

        // 創建解析器build對象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 讀取xml對象
        Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
        // 獲取根節點
        Element rootElement = userMapper.getRootElement();
        return rootElement.getAttributeValue("name");
    }

結果展示

調用解析方法解析文件

try {
     List<Map<String, String[]>> maps = JDomUtils.parseMapperAll("UserMapper.xml");
     for (Map<String, String[]> map :
             maps) {
         System.out.println("dnName:"+map.get("dbName")[0]+" fName:"+map.get("fName")[0]);
     }
 } catch (JDOMException | IOException e) {
     e.printStackTrace();
 }

結果:爲了簡單,這裏只取第一個值,別名沒有進行展示

dnName:USER_NAME  fName:userName
dnName:ARCHIVE_ID  fName:archiveID
dnName:USER_MOBILE  fName:userMobile
dnName:DEPT_NAME  fName:userDept
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章