我正在用Jaxb生成一些看起来很不错的XML。下面是一个片段:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ns2:oval_system_characteristics xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5 oval-system-characteristics-schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx esx-system-characteristics-schema.xsd"
xmlns:ns2="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5" xmlns="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:ns3="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
…
<ns3:visdkmanagedobject_item id="1">
<ns3:property>isolation.tools.diskWiper.disable</ns3:property>
<ns3:value datatype="boolean">true</ns3:value>
</ns3:visdkmanagedobject_item>
这是符合标准的XML。不幸的是,由于下游系统的限制,它只接受这样格式化的XML:
<visdkmanagedobject_item id="1" xmlns="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx">
<property>isolation.tools.diskWiper.disable</property>
<value datatype="boolean">true</value>
</visdkmanagedobject_item>
其中某些元素通过xmlns属性命名空间。现在,对于这个问题,如何让Jaxb停止(做正确的事情)使用前缀为元素设置名称空间,并开始使用xmlns属性为元素设置名称空间?
您可以通过在包级别利用@XmlSchema
注释来设置默认名称空间。这是通过利用package-info
类来完成的(示例如下):
com.example.package-info
@XmlSchema(
namespace = "http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
查看更多信息
- http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
有几种方法可以解决这个问题。它可能如此简单,或者您可能需要完全控制名称空间前缀。(顺便说一句,第二个XML不是"不正确的",它只是使用默认名称空间。但是,如果系统要求xml有特定的前缀,那么是不正确的。