1

* *编辑 - 最后我删除了抽象扩展以使其发挥作用,然后来自 Blaise 的答案有效

你好。
我的架构中有一个复杂的类型:

<xs:complexType name="AbstractWorkflow" abstract="true">
    <xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="ProcessWorkflow" mixed="true">
    <xs:complexContent>
        <xs:extension base="AbstractWorkflow"/>
    </xs:complexContent>
</xs:complexType>

要解组的输入是这个

<ns1:Workflow stb:id="Workflow" xsi:type="ns1:ProcessWorkflow">workflowHTML.xml</ns1:Workflow>

但是当我这样做时,我没有选择从 xjc 生成的类中访问值:workflowHTML.xml。这是生成的 AbstractWorkflow 类的开始是否有我可以在这个类中声明的注释,它扩展了一个抽象类,以指定它是一个本身携带值的元素? 它不应该被声明为FIELD吗?

编辑它是我需要实现读取值的扩展类,而不是我最初在这里拥有的抽象类。

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
@XmlType(name = "ProcessWorkflow")
public class ProcessWorkflow
    extends AbstractWorkflow
{



}

谢谢阅读。

4

1 回答 1

4

我相信您正在寻找 @XmlValue 注释。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Foo {

    @XmlAttribute
    private int id;

    @XmlValue
    private String value;

}

以上对应于以下 XML 模式:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="foo" type="foo"/>

  <xs:complexType name="foo">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:int" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

像这样的XML:

<foo id="123">Some Value</foo>
于 2011-05-04T13:20:42.463 回答