java - JAXB:如何避免 xmlns:xsi 的重复命名空间定义

标签 java xml jaxb

我有一个 JAXB 设置,我在其中使用 @XmlJavaTypeAdapter 将 Person 类型的对象替换为仅包含该人的 UUID 的 PersonRef 类型的对象。这工作得很好。但是,生成的 XML 每次使用时都会重新声明相同的命名空间 (xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")。虽然这通常没问题,但就是感觉不对。

如何配置 JAXB 以在文档的开头声明 xmlns:xsi?我可以手动将命名空间声明添加到根元素吗?

这是我想要实现的示例:

电流:

<person uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a">
    <relation type="CHILD"> 
        <to xsi:type="personRef" uuid="56a930c0-5499-467f-8263-c2a9f9ecc5a0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
    </relation> 
    <relation type="CHILD"> 
        <to xsi:type="personRef" uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
    </relation>
    <!-- SNIP: some more relations -->
</person>

通缉:

<person uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <relation type="CHILD"> 
        <to xsi:type="personRef" uuid="56a930c0-5499-467f-8263-c2a9f9ecc5a0"/> 
    </relation> 
    <relation type="CHILD"> 
        <to xsi:type="personRef" uuid="6ec0cf24-e880-431b-ada0-a5835e2a565a"/> 
    </relation>
    <!-- SNIP: some more relations -->
</person>

最佳答案

不是那样很漂亮,但您可以向根元素添加一个空的 schemaLocation:

marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "");

关于java - JAXB:如何避免 xmlns:xsi 的重复命名空间定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280271/

相关文章:

java - 使用 JAXB 使用 namspaces 解码 XML 时为空值

java - 如何以编程方式从 Java 创建 XML?

java - 嵌入式tomcat返回空白页

c++ - QT中如何将xml节点数据转化为字符串

java - JTable 自定义 header 渲染器看起来像其他带有灵光外观的 header 吗?

java - 如何获得打开另一个 Activity 的按钮?

java - 尝试列出对象时,AmazonS3 客户端 org.xml.sax.SAXParseException

java - 整数解码列表不正确

java - 安卓服务 START_STICKY START_NOT_STICKY

Java文件过滤器