【问题标题】:Generating closing tag for empty elements using XMLBeans使用 XMLBeans 为空元素生成结束标记
【发布时间】:2011-07-17 18:23:37
【问题描述】:

我有以下 xsd :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee" type="employeeType"/>
  <xs:complexType name="employeeType">
    <xs:sequence>
      <xs:element type="xs:string" name="name"/>
      <xs:element type="xs:int"  name="age"/> 
      <xs:element type="xs:string" name="address"/>          
    </xs:sequence>
  </xs:complexType>
</xs:schema>

如果我为 Name 设置值 only

 EmployeeDocument request=EmployeeDocument.Factory.newInstance();
 EmployeeType emp=EmployeeType.Factory.newInstance();
 emp.setName("Name");
 request.setEmployee(emp);

然后 XMLBeans 生成以下 xml:

<employee>
    <name>Name</name>
</employee>

但我需要生成以下类型的 xml,这意味着为所有未在程序中设置值的元素关闭标签 &lt;/&gt;

<employee>
    <name>Name</name>
    <age/>
    <address/>
</employee>

好吧,如果我设置一个空字符串,即emp.setAddress("");,XMLBeans 会生成&lt;address/&gt;

有没有什么方法可以使用 XMLBeans 来满足这样的要求,而不需要设置空字符串。

此外,我们无法为 int 类型的元素年龄设置空字符串。

任何帮助将不胜感激。

【问题讨论】:

    标签: xsd marshalling unmarshalling xmlbeans


    【解决方案1】:

    执行此操作的 XMLSchema 方法是将 nillable="true" 添加到您的年龄和地址元素中。当您使用 XMLBeans 重新编译 xsd 时,您将拥有 .setNilAge().setNilAddress() 方法。生成的 xml 将如下所示:

    <employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <name>Name</name>
      <age xsi:nil="true"/>
      <address xsi:nil="true"/>
    </employee>
    

    顺便说一句,如果可能的话,最好使用.addNewEmployee() 而不是.setEmployee() 来构建您的文档。这样可以避免将员工实例复制到成本更高的文档中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多