xmlns:xsi和xsi:noNamespaceSchemaLocation的Jaxb顺序

xmlns:xsi和xsi:noNamespaceSchemaLocation的Jaxb顺序,jaxb,xml-namespaces,Jaxb,Xml Namespaces,我正在使用JAXB创建一个xml。 使用 marshaller.setProperty( Marshaller.JAXB_无名称空间_模式_位置, “bla bla.xsd”) 正在生成的xml是 <Interface xsi:noNamespaceSchemaLocation="bla-bla.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 但是,出于某种原因解析此xml的应用程序没有解析它,因为它们需要

我正在使用JAXB创建一个xml。 使用 marshaller.setProperty( Marshaller.JAXB_无名称空间_模式_位置, “bla bla.xsd”)

正在生成的xml是

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

但是,出于某种原因解析此xml的应用程序没有解析它,因为它们需要此格式的xml

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


更改目标应用程序不是一个选项:(

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

import javax.xml.bind.*;
导入javax.xml.stream.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Interface.class);
XMLOutputFactory xof=XMLOutputFactory.newFactory();
XMLStreamWriter xsw=xof.createXMLStreamWriter(System.out);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_NO_NAMESPACE_SCHEMA_位置,“bla bla.xsd”);
marshaller.marshall(新接口(),xsw);
}
}
输出


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

import javax.xml.bind.*;
导入javax.xml.stream.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Interface.class);
XMLOutputFactory xof=XMLOutputFactory.newFactory();
XMLStreamWriter xsw=xof.createXMLStreamWriter(System.out);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_NO_NAMESPACE_SCHEMA_位置,“bla bla.xsd”);
marshaller.marshall(新接口(),xsw);
}
}
输出



谢谢!但正如你提到的,问题仍然存在,我们无法控制订单。我做了与我需要写入文件相同的事情,只是使用了文件写入器。谢谢!但正如你提到的,问题仍然存在,我们无法控制订单。我做了与我需要写入文件相同的事情,只是使用了文件写入器。