#java #xml
#java #xml
Вопрос:
Я нашел следующий фрагмент кода из блога, при его запуске я получаю исключение
Исключение XMLParseException: ожидается начало корневого элемента. на 9-й строке.
Кто-нибудь может объяснить, почему я получаю исключение, и предложить любой другой способ преобразования строки в элемент?
String s = "Hello DOM Parser";
java.io.InputStream sbis = new java.io.StringBufferInputStream(s);
javax.xml.parsers.DocumentBuilderFactory b = javax.xml.parsers.DocumentBuilderFactory.newInstance();
b.setNamespaceAware(false);
org.w3c.dom.Document doc = null;
javax.xml.parsers.DocumentBuilder db = null;
db = b.newDocumentBuilder();
doc = db.parse(sbis);
org.w3c.dom.Element e = doc.getDocumentElement();
Комментарии:
1.
"Hello DOM Parser"
это не XML.2. @skaffman — есть вероятность, что исходный текст содержал теги элементов, но эти теги были удалены в процессе копирования / вставки текста между веб-приложениями… но в любом случае, исходное сообщение, как я вижу, не содержало элементов тега в
String s
объявлении.3. @Abhishek, я предполагаю, что вы сослались на мой пост в блоге, основываясь на фрагменте кода и выданном исключении, поскольку строка на самом деле не является представлением элемента xml. Увидев это, я обновил свой пост в блоге , чтобы избежать каких-либо осложнений.
Ответ №1:
Чтобы создать DOM Element
с пользовательским тегом (который, я полагаю, вам нужен, но не могу быть уверен), вы можете использовать следующий подход:
String customTag = "HelloDOMParser";
Document doc = documentBuilder.newDocument();
String fullName = nameSpacePrefix ":" customTag;
Element customElement = document.createElementNS(namespaceUri, fullName);
doc.appendChild(customElement);
Я предполагаю, что вы знаете URI пространства имен и свой префикс (если таковой имеется). Если вы не используете пространства имен, просто используйте createElement()
метод вместо этого.
Ответ №2:
Как сказано в комментарии, «Hello DOM Parser» не является элементом XML. И поэтому анализатор не знает, что с этим делать. Я не знаю, какой документ вы создаете, но если вам нужен HTML, вы можете встроить текст в html-тег, например;
<div>Hello DOM Parser</div>
<span>Hello DOM Parser</span>
если вы создаете XML, вы можете встроить текст в любой случайный HTML-тег;
<mytag>Hello DOM Parser</mytag>
Некоторые пояснения по DOM;
http://www.w3.org/DOM
Чтобы ответить на ваш вопрос, для преобразования строки в элемент w3c вы можете использовать createElement;
Element hello = document.createElement("hello");
hello.appendChild(document.createTextNode("Hello DOM Parser"));
Это приводит к;
<hello>Hello DOM Parser</hello>
Комментарии:
1. да, вы правы. но на повестке дня стоит вопрос о том, как преобразовать строку в элемент
Ответ №3:
Метод parse DocumentBuilder принимает входной поток, который содержит содержимое xml. Следующее изменение будет работать для вас:
String s = "<?xml version="1.0" encoding="UTF-8"?>n<root><elem1>Java</elem1></root>";
Старайтесь избегать использования устаревших классов, таких как StringBufferInputStream. Вы можете обратиться к документу ниже, чтобы узнать больше о синтаксическом анализе Java XML.