提取元素文本值

我正在使用JAXB生成用于将xml解组为java实体的代码,使用xsd文件进行原理图。 问题是生成的代码不会生成以下xml中指定的organizationname

  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; 而不是为delimiterprefixsuffix创建单独的属性。 同样重要的是,它也无法让我访问顶部xml中name标签内的文本值。 当我从xsd文件中的ON定义中删除mixed="true" ,内容列表将替换为delimiterprefixsuffix单独属性,但我仍然无法获取name元素的文本内容。 我犹豫是否删除mixed=true因为我读到mixed = true指定complextype可以包含elementsattributestext

如何更改上面的代码,以便除了为每个其他元素/属性生成单独的方法之外,还生成一个检索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)。