Xml Jaxb命名空间和属性顺序

时间:2018-12-04 16:57:54

标签: java xml namespaces jaxb attributes

我正在尝试使用JaxB(Jaxb2Marshaller)将Java对象解析为Xml表示形式。在元素之一中,我有两个名称空间和几个属性。一切都很好,但是首先我得到了属性,然后是名称空间。 如何更改,甚至可以更改顺序,因此首先要有名称空间,然后是所有属性。

我现在所拥有的

    <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 :(得分:0)

我不知道如何更改订单,但是您可以使用已有的内容生成一个全新的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(我不知道这是不是正确的名称)来设置值:

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

希望我能为您提供帮助。