倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

QName を接頭辞付きのタグ名に変換する

以前の記事で 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 になることは無いかも知れませんが。