Java 如何使用JAXB将xmlns:xs和xmlns:xsi移动到根元素?
我需要从XSD生成的Java类生成XML文件 这些Java类中的一些字段是Java 如何使用JAXB将xmlns:xs和xmlns:xsi移动到根元素?,java,xml,jaxb,Java,Xml,Jaxb,我需要从XSD生成的Java类生成XML文件 这些Java类中的一些字段是Object,而不是任何具体类型,因此在生成的XML文件中保证了xsi:type属性,这很好 但不好的是,除了xsi:type之外,还添加了完整的名称空间定义(xmlns:xs=”http://www.w3.org/2001/XMLSchema“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“),并使XML非常不可读 总而言之,以下是我现在生成的内容: <?x
Object
,而不是任何具体类型,因此在生成的XML文件中保证了xsi:type
属性,这很好
但不好的是,除了xsi:type
之外,还添加了完整的名称空间定义(xmlns:xs=”http://www.w3.org/2001/XMLSchema“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
),并使XML非常不可读
总而言之,以下是我现在生成的内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns:RootTag xmlns:ns="https://example.com">
<ns:SomeObjectField xsi:type="xs:boolean" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</ns:SomeObjectField>
<ns:SomeOtherObjectField xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Some other value</ns:SomePtherObjectField>
</ns:RootTag>
真的
其他价值
这就是我想要产生的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns:RootTag xmlns:ns="https://example.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns:SomeObjectField xsi:type="xs:boolean">true</ns:SomeObjectField>
<ns:SomeOtherObjectField xsi:type="xs:string">Some other value</ns:SomePtherObjectField>
</ns:RootTag>
真的
其他价值
我也有同样的问题。解决方案假设您使用的是JAXBContext的marshaller,您可以为名称空间或模式位置属性设置属性。在我的情况下,我需要一个目录:
jaxbMarshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "facturaComputarizadaEstandar.xsd");
您可能需要为特定案例设置不同的属性 您可以在
package info.java
中显式声明xsi:
@javax.xml.bind.annotation.XmlSchema(
xmlns = {
@javax.xml.bind.annotation.XmlNs(
prefix = "ns",
namespaceURI = "https://example.com"),
@javax.xml.bind.annotation.XmlNs(
prefix = "xsi",
namespaceURI = javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI) },
namespace = "https://example.com",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.foo;
- prefix=“ns”:
- 前缀=”:
@XmlNs
仅在生成模式文件时使用,并且作为一种变通方法,您可以添加:
@XmlSeeAlso(DummyTypeWithinXsi.class)
public class RootTag ...
...
@XmlRootElement(namespace = javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
public class DummyTypeWithinXsi {
}
_一个空的
xsi:schemaLocation
也应该做:marshaller.setProperty(marshaller.JAXB_SCHEMA_LOCATION,”代码>