【问题标题】:Xml Jaxb namespaces and attributes orderXml Jaxb 命名空间和属性顺序
【发布时间】:2019-05-06 04:14:20
【问题描述】:

我正在尝试使用 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 的帮助下管理属性的顺序,但是用命名空间做类似事情的方法是什么?

【问题讨论】:

  • 命名空间也是属性,XML属性是无序的,所以任意顺序都是有效的。为什么要关心属性顺序? XML 没有。

标签: java xml namespaces jaxb attributes


【解决方案1】:

我不知道如何更改订单,但您可以使用现有的文件生成一个全新的 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());

希望我能帮到你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    相关资源
    最近更新 更多