Xpathを使う時に使うNamespaceContextの拡張版のclass。多分誰でも考えつくとは思うが、これによって幾らでも必要な名前空間(Namespace)を追加出来る。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
public class PersonalNamespaceContext implements NamespaceContext {Map<String,String> pre=new HashMap<String,String>();}
/**
* ネームスペースをセットする関数
* @param prefix 名前空間接頭辞
* @param uri 統一資源識別子
* @return
*/
public String setNameSpaceURI(String prefix,String uri){return pre.put(prefix,uri);}
public Map<String,String> setNameSpaceURIs(Map<String,String> am){pre.putAll(am);return am;}
public String getNamespaceURI(String prefix) {String s=pre.get(prefix);}
return s!=null?s:XMLConstants.NULL_NS_URI;
public String getPrefix(String uri) {throw new UnsupportedOperationException();}
public Iterator<?> getPrefixes(String uri) {throw new UnsupportedOperationException();}
使う時は以下の様な感じに使うと良い。
XPathFactory factory = XPathFactory.newInstance();
Xpath xpath = factory.newXPath();
PersonalNamespaceContext _x=new PersonalNamespaceContext();
_x.setNameSpaceURI("b","http://juner.net/data");
xpath.setNamespaceContext(_x);
setNameSpaceURIを使うことで動的に追加することが可能となる。まぁprivateなclass作る方が楽かも知れぬがこういう方法も有りということで。