Я получаю сообщение об ошибке при синтаксическом анализе документа. Показывает пустой документ
Error:[Request processing failed; nested exception java.lang.NullPointerException] with root cause java.lang.NullPointerException
String subBuildFile = "E:\Data Sync 4.4\WEB-INF\Temp_Project\Project_3";
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(subBuildFile));
Node s = doc.getElementsByTagName("userList").item(1);
for(int i =2; i < doc.getElementsByTagName("user").getLength(); i++) {
doc.getElementsByTagName("userList").item(i)
.removeChild(doc.getElementsByTagName("userList").item(i));
}
отображается: [Ошибка обработки запроса; вложенное исключение - java.lang.NullPointerException] с основной причиной java.lang.NullPointerException
Извините, но проблема с вашим вопросом заключается в том, что вы показываете код null, только Exception ... Пожалуйста, добавьте свой код, который выдает этот Exception.
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance (); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder (); Документ doc = dBuilder.parse (новый InputSource (subBuildFile)); Узел s = doc.getElementsByTagName ("userList"). Item (1); for (int i = 2; i <doc.getElementsByTagName ("user"). getLength (); i ++) {doc.getElementsByTagName ("userList"). item (i) .removeChild (doc .getElementsByTagNam e ("userList ") .item (i)); }
в строке subBuildFile = "E: \ Data Sync 4.4 \ WEB-INF \ Temp_Project \ Project_3"
На что указывает исключение нулевого указателя? Итак, мы можем определить, что является нулевым.
Пожалуйста, не используйте комментарии, чтобы расширить свой вопрос: редактировать ваш вопрос, чтобы добавить подробности.
@MarkRotteveel Я не думаю, что это дубликат NPE. OP по крайней мере знал, что Document был нулевым и вызывает NPE, но просто не был уверен, что ПочемуDocument был нулевым.
@xtratic Учитывая текущее состояние вопроса, это неочевидно и не совсем актуально. В качестве альтернативы я бы выбрал «неясно, о чем вы спрашиваете» или «нуждается в MCVE» в качестве веской причины. Если вопрос отредактирован в форме со всей соответствующей информацией в вопросе, то можно рассмотреть возможность повторного открытия.
Ах да, мои правки еще не прошли. Я скопировал код в комментарии к вопросу. Но, по крайней мере, его первоначальное утверждение «он показывает нулевой документ» показывает, что OP, по крайней мере, знает, что какие имеет значение NULL.
Без полного исключения с трассировкой стека и документа трудно сказать, в чем проблема.




Ваша проблема в том, что вы неправильно используете InputSource.
Вы вызываете new InputSource(String), и этот конструктор говорит следующее:
/**
* Create a new input source with a system identifier.
* ...
* If the system identifier is a URL, it must be fully
* resolved (it may not be a relative URL).
*
* @param systemId The system identifier (URI).
*/
public InputSource (String systemId){...}
Вместо этого используйте этот конструктор:
/** Create a new input source with a character stream. */
public InputSource (Reader characterStream) { ... }
И используйте это так:
Document doc = dBuilder.parse(new InputSource(new StringReader(subBuildFile)));
теперь он показывает: 1: 1: Контент не разрешен в прологе.
Пожалуйста, примите этот ответ, поскольку он отвечал на ваш исходный вопрос, а я могу помочь с остальным. Мне нужно посмотреть, как выглядит содержимое файла.
я пробовал: DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance (); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder (); Документ doc = dBuilder.parse (новый InputSource (subBuildFile)); Узел s = doc.getElementsByTagName ("userList"). Item (1); for (int i = 2; i <doc.getElementsByTagName ("user"). getLength (); i ++) {doc.getElementsByTagName ("userList"). item (i) .removeChild (doc .getElementsByTagNam e ("userList ") .item (i)); }