我有这样的简单xml:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:mdmi="http://schema.omg.org/spec/MDMI/1.0">
<xmi:Documentation
xmi:exporter="Firestar MDMI Tool" xmi:exporterVersion="1.0">
</xmi:Documentation>
</xmi:XMI>
我创建了xsd:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://schema.omg.org/spec/XMI/2.1">
<xs:element name="XMI">
<xs:complexType>
<xs:sequence>
<xs:element name="Documentation">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="exporter"/>
<xs:attribute type="xs:string" name="xmi:exporterVersion"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:float" name="version"/>
</xs:complexType>
</xs:element>
</xs:schema>
然后生成了使用JAXB的java类。并使用unmarshal。
几乎一切正常,但{x}没有提取exporterVersion
字段。
我尝试使用import来命名空间。但没有任何反应
如果设置attributeFormDefault="qualified"
attribut exporter未被提升
答案 0 :(得分:0)
在架构更改中(注意xmi:
前缀作为名称的一部分)
<xs:attribute type="xs:string" name="xmi:exporterVersion"/>
到
<xs:attribute type="xs:string" name="exporterVersion"/>
答案 1 :(得分:0)
您不应在xmi:
的名称中使用exporterVersion
限定符。该命名空间在XML文档中定义,但未在架构中定义。
更重要的是,据我所知,你根本不需要XSD。您似乎正在尝试直接使用XMI Mapping Specification的架构并构建符合该架构的XML文档。如果是这种情况,则不需要您自己的架构。
无论如何,您的XML文档不会以任何方式引用您自己的架构,因此它根本不会影响处理该XML文档。