Найти элементы в узле без правильного пространства имен в Java - PullRequest
19 голосов
/ 14 января 2011

Итак, у меня есть 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: но я передал узел.И я знаю, что не стоит игнорировать пространство имен, но в данном случае это нормально.Моя проблема в том, что я не знаю, как искать узел для элемента, игнорируя пространство имен.Я также думал о добавлении пространства имен к входящей str, но я не знаю, как это сделать.

Любая помощь будет принята с благодарностью,

Спасибо, Джош

1 Ответ

32 голосов
/ 14 января 2011

Чтобы сопоставить все узлы с именем 'str' независимо от пространства имен, используйте следующее:

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

Подстановочный знак "*" будет соответствовать любому пространству имен. См. Element.getElementsByTagNameNS (...) .

Редактировать : кроме того, как @Wheezil правильно указал в комментарии, вы должны вызвать DocumentBuilderFactory.setNamespaceAware(true), чтобы это работало, в противном случае пространства имен не будут обнаружены.

...