Jaxb XML编组为根元素添加前缀

时间:2015-03-31 09:34:18

标签: xml jaxb marshalling xml-namespaces prefix

我有问题,我正在生成XML文件Jaxb添加前缀到根元素的命名空间,我不知道如何跳过它。

我有package-info.java文件

    @XmlSchema(namespace = "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03", xmlns = {
        @XmlNs(namespaceURI = "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03", prefix = "")
}, elementFormDefault = XmlNsForm.QUALIFIED)

我有根元素

    @XmlType(name = "Document",
        propOrder = {
                "cstmrCdtTrfInitn"
        })
@XmlRootElement(name = "Document")
public class Document {

        @XmlElement(name = "CstmrCdtTrfInitn", required = true)
        protected CustomerCreditTransferInitiationV03 cstmrCdtTrfInitn;
    }

结果我得到了

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Document xmlns:ns2="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
    <ns2:CstmrCdtTrfInitn>
        <ns2:GrpHdr/>
    </ns2:CstmrCdtTrfInitn>
</ns2:Document>

没有@XmlNs它以相同的方式工作,将命名空间添加到@XmlRoolElement也没有帮助。 它可能有什么问题?

1 个答案:

答案 0 :(得分:1)

不确定您尝试的是什么,您的xml完全匹配您的代码。

如果您根本不想要名称空间:

<Document>
 <CstmrCdtTrfInitn>
  <GrpHdr>ala</GrpHdr>
 </CstmrCdtTrfInitn>
</Document

只需将包裹信息更改为

即可
@XmlSchema()

如果你想使用目标命名空间(所以没有前缀),比如

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
 <CstmrCdtTrfInitn>
  <GrpHdr>ala</GrpHdr>
 </CstmrCdtTrfInitn>
</Document>

然后

@XmlSchema(
    namespace = "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03",
    elementFormDefault = XmlNsForm.QUALIFIED)

所有上述测试均使用标准Java7 jaxb