我正在创建亚马逊饲料,饲料xml应该像:
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
我使用jaxb从java类生成xml文件,我使用jaxb示例中的NamespacePrefixMapperImpl将命名空间添加到xml中。但目前它生成的根目录如下:
<AmazonEnvelope xmlns:xsi:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
如何从amzn-envelope.xsd ??
中删除xmlns这是我在NamespacePrefixMapperImpl
中使用的映射if( "http://www.w3.org/2001/XMLSchema-instance".equals(namespaceUri) )
return "xsi";
if("amzn-envelope.xsd".equals(namespaceUri))
return "xsi:noNamespaceSchemaLocation";
答案 0 :(得分:3)
我在Marshaller找到了一个可以添加amzn-envelope.xsd:
的属性marshaller.setProperty("jaxb.noNamespaceSchemaLocation", "amzn-envelope.xsd");
并离开NamespacePrefixMapper以添加“http://www.w3.org/2001/XMLSchema-instance”。 希望这有助于其他人。
答案 1 :(得分:0)
如果我理解你的意图,你的文档有一个默认的命名空间,而你正在尝试为该命名空间添加schemalLocation
。
NamespacePrefixMapper
不允许您这样做,它仅对选择命名空间的前缀很有用。本文档中没有名称空间,因此没有使用NamespacePrefixMapper
的有用方法。它不能用于添加schemaLocation
提示 - 这些提示由JAXB专门处理,你只是混淆它。
您确定需要noNamespaceSchemaLocation="amzn-envelope.xsd"
吗?您是否尝试在没有它的情况下将其发送到Web服务?