Порядок имен и атрибутов Xml Jaxb - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь разобрать объект Java в представление XML с помощью JaxB (Jaxb2Marshaller).В одном из элементов у меня есть два пространства имен и несколько атрибутов.Все в порядке, но сначала я получил атрибуты, а затем пришли пространства имен.Как изменить, или вообще возможно изменить порядок, поэтому сначала у меня есть пространства имен и после него все атрибуты.

Что у меня сейчас

    <Element elementId="AB000000011" timeStamp="2018-12-04T18:48:52.535+02:00" version="2.0" xmlns="http://www.namespace.com/schemas/namespaceapi" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">

Что мне нравитсядля достижения

    <Element xmlns="http://www.namespace.com/schemas/namespaceapi" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" elementId="AB000000011" timeStamp="2018-12-04T18:48:52.535+02:00" version="2.0" >

Конечно, я могу управлять порядком атрибутов с помощью @ XmlType # propOrder, но как сделать то же самое с пространствами имен?

1 Ответ

0 голосов
/ 04 декабря 2018

Я не знаю, как изменить порядок, но вы можете сгенерировать новый XML-файл, используя то, что у вас есть, и выбрать свой заказ.

    DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
    Document document = documentBuilder.newDocument();

    // Root Element
    Element root = document.createElement("Element");
    document.appendChild(root);

    // xmlns Element 
    Element xmlns = document.createElement("");
    root.appendChild(xmlns);

    // xmlns2 Element 
    Element xmlns2 = document.createElement("xmlns:ns2");
    root.appendChild(xmlns2);

    // Id Element 
    Element elementId = document.createElement("elementId");
    root.appendChild(elementId);

    // timeStamp Element 
    Element timeStamp = document.createElement("timeStamp");
    root.appendChild(timeStamp);

    // Version Element 
    Element version = document.createElement("version");
    root.appendChild(version);

, чем вы можете установить значение с помощью Xpath или Xstream (Iне знаю, правильное ли это имя) вот так:

    // Version Element 
    Element estruturas = document.createElement("version");
    root.appendChild(version);
    version.setTextContent(xpathElement(document, "/Element*[@class='version']").getTextContent());

Надеюсь, я смогу вам помочь.

...