【问题标题】:Jaxb XML marshaling add prefix to root elementJaxb XML 编组向根元素添加前缀
【发布时间】:2015-03-31 09:34:17
【问题描述】:

我有以下问题,我正在生成 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 也无济于事。 它有什么问题?

【问题讨论】:

    标签: xml jaxb marshalling xml-namespaces prefix


    【解决方案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 测试

    【讨论】:

    • 没错,但我得到了带有 ns2: 前缀的 xml 的问题
    • 您的 jaxb 提供商是什么。它是一个真实的例子,还是另一个例子的文档部分,例如肥皂消息。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2013-04-15
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多