首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动XSI模式定义

移动XSI模式定义
EN

Stack Overflow用户
提问于 2014-02-20 16:46:09
回答 1查看 508关注 0票数 1

使用JAXB生成这个XML

代码语言:javascript
复制
<?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>

使用

代码语言:javascript
复制
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);

是否可以在第一个XML标记中移动模式xsi="http://www.w3...“的定义?或者在没有这个模式定义的情况下可以写入和读取XML (包括空值)吗?

我试试这个

代码语言:javascript
复制
@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
  )

没有成功,结果仍然是

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 16:51:51

需要在使用xsi前缀的节点或其上方声明该前缀。由于xsi:schemaLocation位置属性位于beanView元素中,因此需要在那里定义它。

另外,当前在beanView命名空间中有http://www.w3.org/2001/XMLSchema-instance元素,这是错误的。它应该在您自己的名称空间中,或者没有名称空间。

更新

我只想在没有这个xsi url的情况下,用xsi:nil值生成bean到xml和xml到bean。

要从用例中删除xmlns:xsi声明,需要执行以下操作:

  • 删除导致设置xsi:schemaLocation属性的下列调用: jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION,“);
  • 确保您没有任何带有@XmlElement(nillable=true)注释的属性,这将导致设置xsi:nil属性。删除nillable=true方面将导致null被表示为缺席元素。

代码语言:javascript
复制
- [http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html](http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html)

  • 根元素似乎也是命名空间限定的。您需要确保@XmlRootElement (或@XmlElementDecl)注释没有这个命名空间,或者它没有设置在包级别的@XmlSchema注释上(这将在package-info类上)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21914246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档