Мне нужно вставить новый элемент в существующий документ, используя 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.