Java, добавляющий документы XML существующим документам

Должно работать, когда выполняются следующие условия:

1) Доменное имя не является localhost (для проверки тайм-аута вы должны использовать «YourComputerName» вместо «localhost»).

2) Проект компилируется в режиме Release.

3) compilation debug = "false"

, если не ищите здесь альтернативу (ScriptTimeOut): ASP.NET MVC и httpRuntime executeTimeout

Приветствия,
Папа

18
задан ravun 19 May 2009 в 17:50
поделиться

2 ответа

Это немного сложно, но выполняется следующий пример:

public static void main(String[] args) {

    DocumentImpl doc1 = new DocumentImpl();
    Element root1 = doc1.createElement("root1");
    Element node1 = doc1.createElement("node1");
    doc1.appendChild(root1);
    root1.appendChild(node1);

    DocumentImpl doc2 = new DocumentImpl();
    Element root2 = doc2.createElement("root2");
    Element node2 = doc2.createElement("node2");
    doc2.appendChild(root2);
    root2.appendChild(node2);

    DocumentImpl doc3 = new DocumentImpl();
    Element root3 = doc3.createElement("root3");
    doc3.appendChild(root3);

    // root3.appendChild(root1); // Doesn't work -> DOMException
    root3.appendChild(doc3.importNode(root1, true));

    // root3.appendChild(root2); // Doesn't work -> DOMException
    root3.appendChild(doc3.importNode(root2, true));   
}
29
ответ дан 30 November 2019 в 07:28
поделиться

Я знаю, что проблема уже решена, но я все же хотел попытаться решить эту проблему, используя библиотеку XOM , которую я сейчас тестирую (относящуюся к этот вопрос ), и при этом предлагайте другой подход, нежели тот, который дан в ответе Andreas_D.

(Чтобы упростить этот пример, я поместил ваши и в отдельные файлы, которые я прочитал в экземплярах nu.xom.Document .)

import nu.xom.*;

[...]

Builder builder = new Builder();
Document alertDoc = builder.build(new File("src/xomtest", "alertset.xml"));
Document weatherDoc = builder.build(new File("src/xomtest", "weatherset.xml"));
Document mainDoc = builder.build("<DataSet><blank/><blank/></DataSet>", "");

Element root = mainDoc.getRootElement();
root.replaceChild(
    root.getFirstChildElement("blank"), alertDoc.getRootElement().copy());
root.replaceChild(
    root.getFirstChildElement("blank"), weatherDoc.getRootElement().copy());

Ключ состоит в том, чтобы сделать копии элементов, которые будут вставлены в mainDoc ; иначе вы получите жалобу, что «у ребенка уже есть родитель».

Теперь вывод mainDoc дает:

<?xml version="1.0" encoding="UTF-8"?>
<DataSet>
    <alert-set>
        <warning>National Weather Service...</warning>
        <start-date>5/19/2009</start-date>
        <end-date>5/19/2009</end-date>
    </alert-set>
    <weather-set>
        <chance-of-rain type="percent">31</chance-of-rain>
        <conditions>Partly Cloudy</conditions>
        <temperature type="Fahrenheit">78</temperature>
    </weather-set>
</DataSet>

К моему удовольствию, это оказалось очень простым делом с XOM. Написание этого заняло всего несколько минут, хотя я определенно не еще очень хорошо разбираюсь в библиотеке. (Было бы еще проще без элементов , т.е. начиная с простого .)

Итак, если у вас нет убедительных Причины использования только стандартных инструментов JDK, я настоятельно рекомендую попробовать XOM, поскольку он может сделать обработку XML в Java намного более приятной.

7
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: