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 に答える