以前の記事で javax.xml.namespace.QName に定義されているメソッドを紹介しました。 しかし、このクラスには、それが表す QName に対応する「接頭辞付の名前文字列」を返すメソッドが定義されていないようなので、それを返すユーティリティ・メソッドを作成しておきましょう。
接頭辞 (prefix) の有無で場合分けをする必要があります。 これを判定するには QName#getPrefix() で返される String オブジェクトが null か長さ0の文字列かをテストします*1。 それぞれの場合に返す文字列は次の通り:
- 接頭辞がない場合 → ローカル名(QName#getLocalPart() で返される文字列)
- 接頭辞がある場合 → 《接頭辞》+ ":" +《ローカル名》
実際の実装はこんな感じ:
public final class QNameUtils { private QNameUtils(){} public static String toPrefixedName(final QName qname){ if(qname.getPrefix() == null || qname.getPrefix().length() == 0){ return qname.getLocalPart(); }else{ return new StringBuilder() .append(qname.getPrefix()) .append(":") .append(qname.getLocalPart()).toString(); } } }
*1:接頭辞が null になることは無いかも知れませんが。