gpt4 book ai didi

java - 元素的 JAXB 多内容

转载 作者:行者123 更新时间:2023-11-30 11:09:10 26 4
gpt4 key购买 nike

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

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

我在我的文本中寻找的是这样的:

Prof. X clapped!

我想将其提取到我的 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,它包含不同的属性,例如声明为 XML 元素的 m_nLocation、m_nTime、m_nYear,因此 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>

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

谢谢马克斯

最佳答案

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

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

有了这个你可以放在那里String s 和 JAXBElement<Actor>实现所谓的混合内容。

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

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

关于java - 元素的 JAXB 多内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com