だから私はここで宣言した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に名前空間を追加することも考えましたが、方法がわかりません。どちらかをするために。
どんな助けでも大歓迎です、
ありがとう、-ジョシュ
名前空間に関係なく、名前が「str」であるすべてのノードを照合するには、次を使用します。
_NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", str);
_
ワイルドカード「*」は、任意の名前空間に一致します。 Element.getElementsByTagNameNS(...) を参照してください。
Edit:さらに、@ Wheezilがコメントで正しく記述されているように、これを機能させるにはDocumentBuilderFactory.setNamespaceAware(true)
を呼び出す必要があります。それ以外の場合は、名前空間を呼び出す必要があります。検出されません。