Генерация закрывающего тега для пустых элементов с использованием XMLBeans - PullRequest
0 голосов
/ 17 июля 2011

У меня есть следующие 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>

Если я установил значение только для имени, т. Е.

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

Затем XMLBeans генерирует следующий xml:

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

Но мне нужно генерировать следующий вид xml, означающий закрытие тегов </> для всех элементов, значения которых не установлены в программе:

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

хорошо, XMLBeans генерирует <address/>, если я задаю пустую строку, т.е. emp.setAddress("");

Есть ли способ, которым мы могли бы удовлетворить такое требование, используя XMLBeans, не задавая пустую строку.

И более того, мы не можем установить пустую строку для возраста элемента, который имеет тип int.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 22 июля 2011

Способ сделать это в XMLSchema - добавить nillable="true" к вашему возрасту и элементам адреса.Когда вы перекомпилируете xsd с XMLBeans, у вас будут методы .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(), если это возможно.Это позволяет избежать копирования экземпляра сотрудника в документ, который стоит дороже.

...