2015-01-30 4 views
2

В настоящее время я работаю над проектом txt-to-xml. В основном, что я делаю, это создание разных XmlElements для некоторого содержимого. У меня есть DTD и работает, и теперь я создаю xml по умолчанию, чтобы убедиться, что каждый созданный xml является допустимым xml (для данного DTD). Я в основном создаю новые классы для каждого элемента, который не имеет структуры #PCDATA и работает до сих пор довольно хорошо. Сейчас я борюсь с проблемой: я получил следующее в моем DTD:JAXB Несколько содержимого для элемента

<!ELEMENT REACTION(#PCDATA | ACTOR*)> 

Что я ищу в моем тексте что-то вроде:

Профессор X хлопнул!

, и я хочу, чтобы извлечь это в моем XML как:

<REACTION> 
    <ACTOR>Prof. X</ACTOR> clapped! 
</REACTION> 

Так что я в основном хочу это строка-атрибут в ReactionClass который devlares как XML-элемент, но держит актер-Attribute + Остальная часть текста. Я думал, что-то вроде:

String m_sText; 
String m_sActor; 

public ReactionClass(){ 
this.Actor = "Prof. X"; 
this.sText = this.m_sActor + " clapped!"; 
} 

@XmlElement(name = "TEXT") 
public String getM_sText(){ return this.m_sText; } 

@XmlElement(name = "ACTOR") 
public String getM_sActor(){ return this.m_sActor; } 

Для всех других узлов, таких как RootNode я создал RootNodeClass который содержит различные атрибуты, такие как m_nLocation, m_nTime, m_nYear, которые были объявлены в качестве XML-элементов, поэтому JAXB- ИАС только выстраивается XML на основе этих элементов:

<ROOT> 
<TIME>09:00</TIME> 
<LOCATION>New York</TIME> 
<YEAR>1992</YEAR> 
</ROOT> 

Я хотел сделать то же самое с реакционно-Node (как упоминалось выше), но при создании нового класса рЕАКЦИИ я получаю н. например:

<REACTION> 
    <TEXT>Prof. X clapped!</TEXT> 
    <ACTOR>Prof. X</ACTOR> 
</REACTION> 

Как бы я поместил их в один элемент, но сохранил теги, такие как выше? Если у кого-нибудь есть идея, как справиться с этим, я был бы очень благодарен!

Спасибо Макс

ответ

1

Во-первых, то, что вы, скорее всего, нужно @XmlMixed. Вы, вероятно, имеют структуру, как:

@XmlMixed 
@XmlElementRefs({ 
    @XmlElementRef(name="ACTOR", type=JAXBElement.class), 
    ...}) 
List<Object> content; 

При этом вы могли бы поставить там String с и JAXBElement<Actor> для достижения так называемого смешанного содержимого.

Далее вы можете сначала включить DTD в XML-схему и скомпилировать ее - или скомпилировать DTD с помощью XJC.

Наконец, у вас есть так называемые «полуструктурированные данные», которые, я думаю, не подходят для JAXB. JAXB отлично работает для сильных и четких структур, но если у вас смешанные вещи, вы получаете странные модели, с которыми сложно работать. Однако я не могу предложить альтернативу.