Кто-нибудь, пожалуйста, укажите, в каком состоянии я должен установить setNamespaceAware на true или false
Согласно документации Specifies that the parser produced by this code will provide support for XML namespaces.
Однако, если я установил для него значение true, для тегов XML с пространством имен он выдает ошибку.
DocumentBuilderFactory document_builder_factory = null;
DocumentBuilder builder = null;
document_builder_factory = DocumentBuilderFactory.newInstance();
document_builder_factory.setNamespaceAware(true);
try{
Text text = new Text();
text.set("<h:test>10</h:test>");
builder = document_builder_factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(text.toString())));;
System.out.println(doc.getElementsByTagName("h:test").item(0).getChildNodes().item(0).getNodeValue());
}catch (Exception e){
}
Я получаю следующую ошибку, если для setNamespaceAware установлено значение true.
[Fatal Error] :1:9: The prefix "h" for element "h:test" is not bound.
Если я его не установлю, я получаю значение без ошибок.
Возможный дубликат Есть ли недостатки у setNamespaceAware (true)?
@JonnyHenly Я проверил этот ответ, но до сих пор не понимаю, когда установить значение true, а когда - false. Вы можете привести мне пример




В документе, не поддерживающем пространство имен, двоеточие является допустимым символом имени узла, поэтому вы можете, например, иметь элемент <h: test>.
Такие элементы до того, как были введены пространства имен XML, работали бы нормально. Таким образом, для обратной совместимости, когда была введена поддержка пространств имен, единственным способом сохранить этот код работающим без изменений, было сделать осведомленность о пространстве имен ложной по умолчанию, потому что <h: test> недопустимо в документе, поддерживающем пространство имен.
DocumentBuilderFactory#setNamespaceAware