java 如何从JAXB编组的XML文件中删除xmlns:xsi和xsi:type

bluesky3月前 ⋅ 17 阅读

ChatGPT的回答仅作参考:

要从JAXB编组的XML文件中删除xmlns:xsi和xsi:type,可以使用以下代码:

```java
// 创建 JAXBContext
JAXBContext jaxbContext = JAXBContext.newInstance(YourClass.class);

// 创建 Marshaller
Marshaller marshaller = jaxbContext.createMarshaller();

// 设置 Marshaller 属性
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper() {
    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        if (namespaceUri.equals(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)) {
            return "";
        }
        return suggestion;
    }
});

// 编组对象到 XML 文件
YourClass obj = new YourClass();
marshaller.marshal(obj, new File("output.xml"));
```

在上面的代码中,我们创建了一个NamespacePrefixMapper对象,并将其设置为Marshaller的属性。在getPreferredPrefix方法中,我们检查命名空间URI是否为XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI(即xsi命名空间URI),如果是,则返回空字符串,否则返回建议的前缀。这将导致Marshaller在编组XML文件时不包括xmlns:xsi和xsi:type属性。

全部评论: 0

    相关推荐