4

JAXB2 的默认 XML 输出如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TEST2 xmlns="http://projects/open/2012/UniformProxySystem">
    <XXX1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <XXX2>17:02:26</XXX2>
    <XXX3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</TEST2>

但我希望它像下面这样:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TEST2 xmlns="http://projects/open/2012/UniformProxySystem" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <XXX1 xsi:nil="true"/>
    <XXX2>17:01:08</XXX2>
    <XXX3 xsi:nil="true"/>
</TEST2>

寻求帮助,我正在使用带有 JAXB 2.1 的 JDK6

4

5 回答 5

1

您可以尝试使用@XmlSchema注释并执行以下操作:

包信息.java

@XmlSchema(
    elementFormDefault=XmlNsForm.QUALIFIED,
    namespace="http://projects/open/2012/UniformProxySystem",
    xmlns={@XmlNs(prefix="xsi",
                  namespaceURI="http://www.w3.org/2001/XMLSchema-instance")}
)
package com.example;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
于 2012-04-25T16:38:17.820 回答
1

这行得通!

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://projects/open/2012/UniformProxySystem", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
    ,
            xmlns={@XmlNs(prefix="xsi",
            namespaceURI="http://www.w3.org/2001/XMLSchema-instance"),
            @XmlNs(prefix="",
            namespaceURI="http://projects/open/2012/UniformProxySystem")}
)
于 2012-04-26T03:21:05.477 回答
0

您还可以参考此处的答案以获得替代解决方案,特别是如果您的程序中已经有前缀名称空间映射器(如果您从 XSD 生成 JAXB 类也很有用)。

于 2012-04-26T00:09:47.567 回答
0

我将 SCHEMA_LOCATION 属性添加到 marsheller,这有效,但生成另一个 attr xsi:schemaLocation="...",所以我在生成的 Docuemnt 对象中手动删除了这个 attr。

于 2012-04-26T01:45:41.413 回答
0

在java中,也许你使用

        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Marshaller ms = JAXBContext.newInstance(CreateGPSRequest4RAS.class).createMarshaller();

        ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        ms.setProperty(Marshaller.JAXB_FRAGMENT, true);
        ms.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "");
        ms.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");

        ms.marshal(gpsRequest, document);
于 2016-01-28T11:31:28.567 回答