2014-01-08 5 views
0

Я хава в XML-строку, которая выглядит следующим образом:Добавить корневой элемент XML в Java

<?xml version="1.0" encoding="UTF-8"?> 
<id>500404</id> 
<parentid>0</parentid> 
<version>1</version> 
<nodes> 
    <id>1015252</id> 
    <category>NODE</category> 
    <modified>false</modified> 
    <X>80</X> 
    <Y>30</Y> 
</nodes> 

Я хочу изменить его программно путем добавления тега корневого узла под названием «модель». Я попытался разобрать строку с помощью DOM, прочитать все дочерние узлы, а затем создать новый xml-документ типа Document с корневым узлом, который называется «моделью», который имеет дочерние узлы все узлы XML-строки, которые у меня уже есть. Но это дает мне следующее исключение: Разметка в документе, следующем за корневым элементом, должна быть хорошо сформирована.

Мой код до сих пор:

String xmlString = "XML GOES HERE" 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     InputSource inputstream = new InputSource(new StringReader(
       xmlString)); 
     Document doc = builder.parse(inputstream); 
     NodeList nodes = doc.getChildNodes(); 
       Document doc2 = docBuilder.newDocument(); 
     Element rootElement = doc2.createElement("model"); 
     doc2.appendChild(rootElement); 
       for (int k = 0; k < nodes.getLength(); k++) 
      { 
       Node childn = nodes.item(k); 
       rootElement.appendChild(childn); 
         } 

Любая помощь, пожалуйста?

+0

Оригинал не XML - поскольку он не имеет корня, поэтому XML-анализатор XML не может его прочитать - вам придется использовать простые текстовые инструменты (мой обычный комментарий к этому вопросу - попросить отправителя этого файла отправить действительный XML-файл - это их ошибка) – Mark

ответ

0

Ваша проблема в том, что ваша строка xml не очень хорошо сформирована (see Wikipedia article). Корневой элемент должен быть уникальным. У вас есть 4 "корневых" элемента: id, parentid, version и nodes.

Это не может быть проанализировано с использованием синтаксического анализатора XML, который ожидает корректного ввода. Я боюсь, что вам нужно изменить строку как текст программно или вручную. Вставьте начальный тег после <?xml version="1.0" encoding="UTF-8"?> и добавьте соответствующий конечный тег в конец строки.

0

Просто добавьте <model> строку после <?xml version="1.0" encoding="UTF-8"?> и </model> в конец файла. Я думаю, нет необходимости разбирать весь документ, чтобы добавить корневой элемент.

Смежные вопросы