web-dev-qa-db-ja.com

Nodeで、適切な名前空間のないJavaで要素を検索します

だから私はここで宣言した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になりましたが、ノードを渡しました。そして、名前空間を無視するのは良くないことを私は知っていますが、この場合は問題ありません。私の問題は、名前空間を無視してNodeで要素を検索する方法がわからないことです。また、入ってくるstrに名前空間を追加することも考えましたが、方法がわかりません。どちらかをするために。

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

ありがとう、-ジョシュ

20
Grammin

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

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

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

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

33
robert_x44