JAXB: демонтирование фрагментов xhtml - PullRequest
1 голос
/ 25 ноября 2011

У меня есть сторонняя схема XSD, которая, помимо элементов из собственного пространства имен, позволяет включать отформатированные фрагменты текста в XHTML.Скажем (урезанный образец):

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema 
targetNamespace="http://www.example.org/myns" 
xmlns:myns="http://www.example.org/myns" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xhtml="http://www.w3.org/1999/xhtml" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified">

<xsd:element name="body">
<xsd:complexType >
 <xsd:sequence>
  <xsd:element name="expression" type="xsd:string" />
  <xsd:element name="documentation" type="myns:formattedText" /> 
 </xsd:sequence>
</xsd:complexType>
</xsd:element>


<xsd:complexType name="formattedText">
 <xsd:sequence>
  <xsd:any namespace="http://www.w3.org/1999/xhtml" processContents="lax"/>
 </xsd:sequence>
</xsd:complexType>


</xsd:schema>

Я сгенерировал свои Java-предложения, используя JAXB (Sun) (xfc myschema.xsd), и исключения unmarshalling работает для узла formattedText, его метод getAny() возвращает ноль.

Меня совсем не интересует получение xhtml DOM на Java, я просто хочу необработанный текст (CDATA).Я предполагаю, что, если бы мне было позволено изменить схему, заменив приведенную выше строку:

  <xsd:element name="documentation" type="xsd:string" /> 

было бы достаточно, но я бы предпочел другой способ, если это возможно.Я очень мало знаю о JAXB.Любые советы?

Обновление: я обновил образец схемы, чтобы его можно было дословно проверить.Я хотел бы, чтобы для этой схемы и для следующего примера XML

<?xml version="1.0" encoding="UTF-8"?>
<body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns="http://www.example.org/myns"         
       xmlns:xhtml="http://www.w3.org/1999/xhtml"
       xsi:schemaLocation="http://www.example.org/myns">

   <expression>hi</expression>
   <documentation>  
         Hello <b>world</b>
   </documentation>

</body>

был получен класс Body, который возвращает в своем методе body.getDocumentation (). GetAny () необработанную строку Hello <b>world</b>

1 Ответ

1 голос
/ 25 ноября 2011

Вы можете использовать аннотацию @XmlAnyElement и указать DomHanlder для преобразования этого раздела XML в String в модели вашего домена.

Для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...