Как вставить элемент в существующий документ с использованием XMLBeam? - PullRequest
0 голосов
/ 27 октября 2019

Мне нужно вставить новый элемент в существующий документ, используя XMLBeam . Я могу создавать документы с нуля и читать существующие документы хорошо, но борется со вставкой. Как вставить новый элемент, как указано в комментарии ниже в примере XML, например, с идентификатором 3?

Скажите, у меня есть этот XML:

<p:PEOPLE xmlns:p="people-namespace">
    <p:PERSON id="1">
        <p:FIRST_NAME>John</p:FIRST_NAME>
        <p:LAST_NAME>Smith</p:LAST_NAME>
    </p:PERSON>
    <p:PERSON id="2">
        <p:FIRST_NAME>Sally</p:FIRST_NAME>
        <p:LAST_NAME>Green</p:LAST_NAME>
    </p:PERSON>
    <!-- How to add a new PERSON here with id = 3 ?? -->
</p:PEOPLE>

и эти проекционные интерфейсы:

interface PeopleData {

    @XBRead("/p:PEOPLE")
    List<Person> getAllPeople();

}


interface Person {

    @XBRead("@id")
    int getPersonId();

    @XBRead("p:FIRST_NAME")
    String getFirstName();

    @XBRead("p:LAST_NAME")
    String getLastName();
}

Я читаю данные, как показано ниже:

new XBProjector().io().file("some file name").read(PersonData.class);

Я использую Saxon в качестве движка XPath и установилКонтекст пространства имен в фабричной конфигурации выглядит следующим образом:

@Override
public XPath createXPath(Document... document) {
    XPathFactory factory = new XPathFactoryImpl();
    XPath xpath = factory.newXPath();
    xpath.setNamespaceContext(new PeopleNamespaceContext());
    return xpath;
}

Я пробовал несколько разных способов, но продолжаю нажимать это исключение:

org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...