1

我正在使用 JAXB 创建一个 xml。使用 marshaller.setProperty( Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "bla-bla.xsd");

正在生成的 xml 是

<Interface xsi:noNamespaceSchemaLocation="bla-bla.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

但是由于某种原因正在解析这个 xml 的应用程序没有解析它,因为他们需要这种格式

<Interface xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="bla-bla.xsd">

更改目标应用程序不是一种选择:(

4

1 回答 1

1

以下利用 JAXB 和 StAX 的方法似乎可以为您提供所需的输出,但由于属性的顺序并不重要,因此不能保证始终有效。

import javax.xml.bind.*;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Interface.class);

        XMLOutputFactory xof = XMLOutputFactory.newFactory();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "bla-bla.xsd");
        marshaller.marshal(new Interface(), xsw);
    }

}

输出

<?xml version="1.0"?><Interface xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="bla-bla.xsd"></Interface>
于 2013-02-07T17:17:07.223 回答