22

だから私はここで宣言したxmlドキュメントを持っています:

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);

次に、文字列を渡す関数があり、それをxmlの要素に一致させたいと思います。

void foo(String str)
{
  NodeList nodelist = doc_.getDocumentElement().getElementsByTagName(str);
}

問題は、入ってstrくるときに名前空間が含まれていないため、テストするxmlは次のようになることです。

<Random>
  <tns:node />
</Random>

そして、strノードになります。したがって、ノードリストはtns:nodeを予期しているため、nullになりましたが、ノードを渡しました。そして、名前空間を無視するのは良くないことを私は知っていますが、この場合は問題ありません。私の問題は、名前空間を無視してノードで要素を検索する方法がわからないことです。入ってくるstrに名前空間を追加することも考えましたが、それを行う方法もわかりません。

どんな助けでも大歓迎です、

ありがとう、-ジョシュ

4

1 に答える 1

43

名前空間に関係なく、名前が「str」であるすべてのノードを照合するには、次を使用します。

NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", str);

ワイルドカード「*」は、任意の名前空間に一致します。Element.getElementsByTagNameNS(...)を参照してください。

編集:さらに、@ Wheezilがコメントでどのように正しく記述されているか、DocumentBuilderFactory.setNamespaceAware(true)これが機能するように呼び出す必要があります。そうしないと、名前空間が検出されません。

于 2011-01-14T15:43:14.243 に答える