使用JAXB生成此XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsi:beanView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" editable="false" name="aaaaa" scrollWidth="0" xsi:schemaLocation="">
<columns>
<column>
<code>aaaaa</code>
<readOnly>false</readOnly>
</column>
</columns>
<queryFilter xsi:nil="true"/>
</xsi:beanView>
带
JAXBContext jaxbContext = JAXBContext.newInstance(BeanView.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.marshal(beanView, System.out);
是否可以移动架构的定义xsi =&#34; http://www.w3..."在第一个XML TAG中又如何? 或者是否可以在没有此模式定义的情况下编写和读取包含空值的XML?
我试试这个
@XmlSchema (
xmlns = {
@javax.xml.bind.annotation.XmlNs(prefix="xsi", namespaceURI="http://www.w3.org/2001/XMLSchema-instance")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED
)
没有成功,结果仍然是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<beanView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" editable="false" name="aaaaa" scrollWidth="0" xsi:schemaLocation="">
<columns>
<column>
<code>aaaaa</code>
<readOnly>false</readOnly>
</column>
</columns>
<queryFilter xsi:nil="true"/>
</beanView>
答案 0 :(得分:1)
xsi
前缀需要在使用它的节点处或之上声明。由于xsi:schemaLocation
位置属性位于beanView
元素中,因此需要在此处定义。
此外,您当前在beanView
命名空间中有http://www.w3.org/2001/XMLSchema-instance
元素,这是错误的。它应该在您自己的命名空间中,或者没有命名空间。
我只想在不使用xsi的情况下将bean生成到xml和xml到bean url,以及xsi:nil值
要从用例中删除xmlns:xsi
声明,您需要执行以下操作:
删除导致xsi:schemaLocation
属性设置的以下调用:
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "");
确保您没有使用@XmlElement(nillable=true)
注释的任何属性,这会导致设置xsi:nil
属性。删除nillable=true
方面将导致null
表示为缺席元素。
您的根元素似乎也是名称空间限定的。您需要确保@XmlRootElement
(或@XmlElementDecl
)注释没有此命名空间,或者未在包级别@XmlSchema
注释上设置它(这将是打开的)一个package-info
类。