【问题标题】:JAXB Multiple Content for Element元素的 JAXB 多个内容
【发布时间】:2015-03-30 05:21:36
【问题描述】:

我目前正在处理一个 txt-to-xml 项目。基本上我所做的是为某些内容创建不同的 XmlElements。 我启动并运行了一个 DTD,现在我正在创建一个默认 xml,只是为了确保创建的每个 xml 都是有效的 xml(对于给定的 DTD)。 我主要为每个元素创建新的类,它没有#PCDATA 结构,到目前为止它工作得很好。 现在我正在努力解决一个问题: 我的 DTD 中有以下内容:

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

我在 Text 中寻找的内容类似于:

教授。 X 鼓掌!

我想将它提取到我的 XML 中:

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

所以我基本上想要的是 ReactionClass 中的 String-Attribute,它作为 XML-Element 开发,但包含一个 Actor-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-Elements,因此 JAXB-Marshaller 只是在这些基础上构建 XML元素:

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

我想对 REACTION-Node 做同样的事情(如上所述),但是当创建一个新的类 REACTION 时,我得到了一些东西。喜欢:

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

我如何将它们放入一个元素中但仍保留上面的标签? 如果有人知道如何管理它,我将非常感激!

谢谢麦克斯

【问题讨论】:

    标签: java xml jaxb dtd


    【解决方案1】:

    首先,您最可能需要的是@XmlMixed。你可能会有这样的结构:

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

    有了这个你就可以放Strings 和JAXBElement&lt;Actor&gt; 来实现所谓的混合内容。

    接下来,您可能会考虑先将您的 DTD 转换为 XML Schema 并对其进行编译——或者使用 XJC 编译 DTD。

    最后,你所拥有的是所谓的“半结构化数据”,我认为它不太适合 JAXB。 JAXB 非常适用于强大而清晰的结构,但如果你有混合的东西,你会得到难以使用的奇怪模型。不过,我无法提出替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2013-01-10
      • 2011-07-06
      相关资源
      最近更新 更多