OSDN Git Service

改行コード修正
[jindolf/JinCore.git] / src / main / java / jp / sourceforge / jindolf / corelib / DomUtils.java
1 /*\r
2  * DOM Utilities\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2011 olyutorskii\r
6  */\r
7 \r
8 package jp.sourceforge.jindolf.corelib;\r
9 \r
10 import java.io.IOException;\r
11 import java.io.InputStream;\r
12 import java.net.URI;\r
13 import java.net.URISyntaxException;\r
14 import java.net.URL;\r
15 import java.util.ArrayList;\r
16 import java.util.List;\r
17 import javax.xml.parsers.DocumentBuilder;\r
18 import org.w3c.dom.Attr;\r
19 import org.w3c.dom.Document;\r
20 import org.w3c.dom.Element;\r
21 import org.w3c.dom.Node;\r
22 import org.w3c.dom.NodeList;\r
23 import org.xml.sax.SAXException;\r
24 \r
25 /**\r
26  * DOM ユーティリティ。\r
27  */\r
28 final class DomUtils{\r
29 \r
30     /**\r
31      * 隠しコンストラクタ。\r
32      */\r
33     private DomUtils(){\r
34         assert false;\r
35         return;\r
36     }\r
37 \r
38 \r
39     /**\r
40      * DOM要素のリストをXMLリソースからロードする。\r
41      * @param builder DOMビルダ\r
42      * @param url URL\r
43      * @param childName 要素名\r
44      * @return DOM要素のリスト\r
45      * @throws IOException 入力エラー\r
46      * @throws SAXException XMLパースエラー\r
47      */\r
48     static List<Element> loadElemList(\r
49             DocumentBuilder builder,\r
50             URL url,\r
51             String childName )\r
52             throws IOException, SAXException{\r
53         Element root = loadElement(builder, url);\r
54         List<Element> result = getChildElemList(root, childName);\r
55         return result;\r
56     }\r
57 \r
58     /**\r
59      * root要素をXMLリソースからロードする。\r
60      * @param builder DOMビルダ\r
61      * @param url URL\r
62      * @return root要素\r
63      * @throws IOException 入力エラー\r
64      * @throws SAXException XMLパースエラー\r
65      */\r
66     private static Element loadElement(DocumentBuilder builder, URL url)\r
67             throws IOException, SAXException{\r
68         InputStream istream = url.openStream();\r
69 \r
70         Document document;\r
71         try{\r
72             document = builder.parse(istream);\r
73         }finally{\r
74             istream.close();\r
75         }\r
76 \r
77         Element root = document.getDocumentElement();\r
78 \r
79         return root;\r
80     }\r
81 \r
82     /**\r
83      * root要素から子要素のリストを得る。\r
84      * @param root root要素\r
85      * @param childName 子要素のタグ名\r
86      * @return 子要素のリスト\r
87      */\r
88     private static List<Element> getChildElemList(\r
89             Element root, String childName){\r
90         NodeList nodeList = root.getElementsByTagName(childName);\r
91         int childNum = nodeList.getLength();\r
92 \r
93         List<Element> result = new ArrayList<Element>(childNum);\r
94 \r
95         for(int index = 0; index < childNum; index++){\r
96             Node node = nodeList.item(index);\r
97             Element element = (Element) node;\r
98             result.add(element);\r
99         }\r
100 \r
101         return result;\r
102     }\r
103 \r
104     /**\r
105      * XMLタグの必須属性値を得る。\r
106      * @param elem XML要素\r
107      * @param attrName 属性名\r
108      * @return 属性値\r
109      * @throws SAXException 必須属性が無かった。\r
110      */\r
111     static String attrRequired(Element elem, String attrName)\r
112             throws SAXException{\r
113         Attr attr = elem.getAttributeNode(attrName);\r
114         if(attr == null){\r
115             throw new SAXException("no attribute[" + attrName + "]");\r
116         }\r
117         String result = attr.getValue();\r
118         if(result == null){\r
119             throw new SAXException("no value[" + attrName + "]");\r
120         }\r
121         return result;\r
122     }\r
123 \r
124     /**\r
125      * XMLタグの属性値を得る。\r
126      * @param elem XML要素\r
127      * @param attrName 属性名\r
128      * @return 属性値。なければnull\r
129      */\r
130     static String attrValue(Element elem, String attrName){\r
131         Attr attr = elem.getAttributeNode(attrName);\r
132         if(attr == null) return null;\r
133 \r
134         String result = attr.getValue();\r
135 \r
136         return result;\r
137     }\r
138 \r
139     /**\r
140      * XML属性値からURIを展開する。\r
141      * @param elem XML国定義要素\r
142      * @param attrName 属性名\r
143      * @return URI\r
144      * @throws SAXException 属性が未定義もしくはURI形式を満たさない。\r
145      */\r
146     static URI attrToUri(Element elem, String attrName)\r
147             throws SAXException{\r
148         Attr attr = elem.getAttributeNode(attrName);\r
149         if(attr == null) return null;\r
150 \r
151         String uriText = attr.getValue();\r
152         if(uriText == null) return null;\r
153 \r
154         URI uri;\r
155         try{\r
156             uri = new URI(uriText).normalize();\r
157         }catch(URISyntaxException e){\r
158             throw new SAXException("illegal URI " + uriText, e);\r
159         }\r
160 \r
161         return uri;\r
162     }\r
163 \r
164 }\r