提取元素文本值
我正在使用JAXB
生成用于将xml解组为java实体的代码,使用xsd
文件进行原理图。 问题是生成的代码不会生成以下xml中指定的organization
的name
:
Some organization's name goes here
以下是Organization
数据类型的xsd定义:
以下是ON
数据类型的xsd
定义:
A name for an organization. A sequence of name parts. A set of codes advising a system or user which name in a set of like names to select for a given purpose. A name without specific use code might be a default name useful for any purpose, but a name with a specific use code would be preferred for that respective purpose.
这是由JAXB
创建的结果java代码:
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ON", propOrder = {"content"}) public class ON { @XmlElementRefs({ @XmlElementRef(name = "delimiter", namespace = "urn:something", type = JAXBElement.class), @XmlElementRef(name = "prefix", namespace = "urn:something", type = JAXBElement.class), @XmlElementRef(name = "suffix", namespace = "urn:something", type = JAXBElement.class) }) @XmlMixed protected List content; @XmlAttribute(name = "use") protected List use; public List getContent() { if (content == null) {content = new ArrayList();} return this.content; } public List getUse() { if (use == null) {use = new ArrayList();} return this.use; } }
这个生成的java类有几个问题。 首先,它创建List content;
而不是为delimiter
, prefix
和suffix
创建单独的属性。 同样重要的是,它也无法让我访问顶部xml中name
标签内的文本值。 当我从xsd文件中的ON
定义中删除mixed="true"
,内容列表将替换为delimiter
, prefix
和suffix
单独属性,但我仍然无法获取name
元素的文本内容。 我犹豫是否删除mixed=true
因为我读到mixed = true指定complextype
可以包含elements
, attributes
和text
。
如何更改上面的代码,以便除了为每个其他元素/属性生成单独的方法之外,还生成一个检索name
元素文本的方法?
试试我的Simplify插件 。 我不确定它是否符合您的要求,但它是针对类似案例编写的。
例:
给你:
@XmlElements({ @XmlElement(name = "a", type = String.class) @XmlElement(name = "b", type = Integer.class), }) protected List aOrB;
但是使用简化插件:
你会得到:
@XmlElement(name = "a", type = String.class) protected List a; @XmlElement(name = "b", type = Integer.class) protected List b;
你有一个类似的情况,你得到你的财产因为mixed="true"
。
如果这对混合类型OOTB不起作用,请在此向我发送带有测试用例的PR并在此处提出问题。
UPDATE
我已经实现了这个function 。
由此 :
你会得到这个:
protected List a; @XmlElement(type = Integer.class) protected List b; @XmlMixed protected List content;
将在下一个版本(0.9.0)。