X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FTogaGem.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fxml%2FDomNsUtils.java;fp=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fxml%2FDomNsUtils.java;h=0000000000000000000000000000000000000000;hp=0bda0462f8c400e8f3f37d2bea33f294cde0bf90;hb=ca790c392b3e12ba485b897aa10334aff7fce4b1;hpb=3747423c564042a26a0d1db6cc1fc79965c5140c diff --git a/src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java b/src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java deleted file mode 100644 index 0bda046..0000000 --- a/src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * XML DOM utilities with namespace - * - * License : The MIT License - * Copyright(c) 2011 MikuToga Partners - */ - -package jp.sfjp.mikutoga.xml; - -import java.text.MessageFormat; -import java.util.Iterator; -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * DOMユーティリティ(名前空間対応)。 - *

各種名前空間引数にnullが渡された場合、全ての名前空間にマッチする。 - *

各種ローカル名引数にnullが渡された場合、全てのローカル名にマッチする。 - *

ノードの持つ名前空間がnullの場合、全ての名前空間引数にマッチする。 - */ -public final class DomNsUtils { - - private static final String ERRMSG_NOELEM = - "Elem:[{0}] was not found in Elem:[{1}]"; - private static final String ERRMSG_NOATTR = - "Attr:[{0}] was not found in Elem:[{1}]"; - private static final String ERRMSG_INVATTR = - "Invalid attribute form Attr[{0}] Value[{1}]"; - - - /** - * 隠しコンストラクタ。 - */ - private DomNsUtils(){ - assert false; - throw new AssertionError(); - } - - - /** - * 名前空間とローカル名が一致するノードか判定する。 - * @param node ノード - * @param nsuri 名前空間URI - * @param localName ローカル名。 - * @return ノードの名前空間およびローカル名が一致したらtrue - */ - public static boolean hasNsLocalNameNode(Node node, - String nsuri, - String localName ){ - String nodeLocalName = node.getLocalName(); - String nodeNsUri = node.getNamespaceURI(); - - if(localName != null){ - if( ! localName.equals(nodeLocalName) ) return false; - } - - if(nsuri != null && nodeNsUri != null){ - if( ! nsuri.equals(nodeNsUri) ) return false; - } - - return true; - } - - /** - * 名前空間とローカル名が一致する要素か判定する。 - * @param node ノード - * @param nsuri 名前空間URI - * @param localName ローカル名。 - * @return 名前空間およびローカル名が一致する要素であればtrue - */ - public static boolean hasNsLocalNameElem(Node node, - String nsuri, - String localName ){ - if(node.getNodeType() != Node.ELEMENT_NODE) return false; - if( ! hasNsLocalNameNode(node, nsuri, localName) ) return false; - return true; - } - - /** - * 親要素が指定された名前の子要素を持つか判定する。 - * @param parent 親要素 - * @param nsuri 名前空間URI - * @param localName ローカル名 - * @return 指定名の子要素が存在すればtrue - */ - public static boolean hasChild(Element parent, - String nsuri, - String localName ){ - for(Node node = parent.getFirstChild(); - node != null; - node = node.getNextSibling() ){ - - if(hasNsLocalNameElem(node, nsuri, localName)){ - return true; - } - } - - return false; - } - - /** - * 指定された名前空間とローカル名に合致する最初の直下子要素を返す。 - * @param parent 親要素 - * @param nsuri 名前空間URI - * @param localName ローカル名 - * @return 最初の直下子要素。見つからなければnull。 - */ - public static Element pickFirstChild(Node parent, - String nsuri, - String localName ){ - Node node = parent.getFirstChild(); - while(node != null){ - if(hasNsLocalNameElem(node, nsuri, localName)){ - break; - } - node = node.getNextSibling(); - } - return (Element) node; - } - - /** - * 指定された名前空間とローカル名に合致する最初の直下子要素を返す。 - *

見つからなければ例外を投げる。 - * @param parent 親要素 - * @param nsuri 名前空間URI - * @param localName ローカル名 - * @return 最初の直下子要素。 - * @throws TogaXmlException 1つも見つからなかった - */ - public static Element getFirstChild(Element parent, - String nsuri, - String localName ) - throws TogaXmlException{ - Element elem = pickFirstChild(parent, nsuri, localName); - - if(elem == null){ - String message = MessageFormat.format(ERRMSG_NOELEM, - localName, - parent.getLocalName() ); - throw new TogaXmlException(message); - } - - return elem; - } - - /** - * 指定された名前の子要素のforeachを返す。 - * @param parent 親要素 - * @param nsuri 名前空間URI - * @param localName 子要素名 - * @return 子要素のforeach - */ - public static Iterable getEachChild(final Element parent, - final String nsuri, - final String localName ){ - Iterable result = new Iterable(){ - @Override - public Iterator iterator(){ - return new SiblingElemIterator(parent, nsuri, localName); - } - }; - return result; - } - - /** - * 要素に属性が存在するか判定する。 - * @param elem 要素 - * @param nsuri 名前空間URI - * @param localName ローカル名 - * @return 存在するならtrue - */ - public static boolean hasAttrNS(Element elem, - String nsuri, - String localName ){ - return elem.hasAttributeNS(nsuri, localName); - } - - /** - * 要素からxsd:string型属性値を読み取る。 - * @param elem 要素 - * @param nsuri 名前空間URI - * @param localName 属性名 - * @return 文字列 - * @throws TogaXmlException 属性値が見つからなかった。 - */ - public static String getStringAttrNS(Element elem, - String nsuri, - String localName ) - throws TogaXmlException{ - if( ! hasAttrNS(elem, nsuri, localName) ){ - String message = MessageFormat.format(ERRMSG_NOATTR, - localName, - elem.getLocalName() ); - throw new TogaXmlException(message); - } - - String result; - try{ - result = elem.getAttributeNS(nsuri, localName); - }catch(DOMException e){ - assert false; - throw new AssertionError(e); - } - - return result; - } - - /** - * 要素からxsd:boolean型属性値を読み取る。 - * @param elem 要素 - * @param nsuri 名前空間URI - * @param localName 属性名 - * @return 真ならtrue - * @throws TogaXmlException 属性値が見つからなかった。 - */ - public static boolean getBooleanAttrNS(Element elem, - String nsuri, - String localName ) - throws TogaXmlException{ - String value = getStringAttrNS(elem, nsuri, localName); - - boolean result; - try{ - result = DatatypeIo.parseBoolean(value); - }catch(IllegalArgumentException e){ - String message = MessageFormat.format(ERRMSG_INVATTR, - localName, - value ); - throw new TogaXmlException(message, e); - } - - return result; - } - - /** - * 要素からxsd:integer型属性値を読み取る。 - * @param elem 要素 - * @param nsuri 名前空間URI - * @param localName 属性名 - * @return int値 - * @throws TogaXmlException 属性値が見つからなかった。 - */ - public static int getIntegerAttrNS(Element elem, - String nsuri, - String localName ) - throws TogaXmlException{ - String value = getStringAttrNS(elem, nsuri, localName); - - int result; - try{ - result = DatatypeIo.parseInt(value); - }catch(NumberFormatException e){ - String message = MessageFormat.format(ERRMSG_INVATTR, - localName, - value ); - throw new TogaXmlException(message, e); - } - - return result; - } - - /** - * 要素からxsd:float型属性値を読み取る。 - * @param elem 要素 - * @param nsuri 名前空間URI - * @param localName 属性名 - * @return float値 - * @throws TogaXmlException 属性値が見つからなかった。 - */ - public static float getFloatAttrNS(Element elem, - String nsuri, - String localName ) - throws TogaXmlException{ - String value = getStringAttrNS(elem, nsuri, localName); - - float result; - try{ - result = DatatypeIo.parseFloat(value); - }catch(NumberFormatException e){ - String message = MessageFormat.format(ERRMSG_INVATTR, - localName, - value ); - throw new TogaXmlException(message, e); - } - - return result; - } - -}