[英]How to generate Java code from an XSD that includes MSFT Serialization: GUID datatypes?
[英]How to get datatypes from XSD generic
我想获取XSD的数据类型。 它必须是静态的,因为XSD可能是变量。 就我而言,我知道元素名称。
XSD的小样本,但可能会更深入:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:float" name="OrderNo"/>
<xs:element type="xs:string" name="OrderDate"/>
<xs:element type="xs:string" name="Name"/>
<xs:element type="xs:float" name="NameNo"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我尝试了org.apache.xerces.xs
但不知道如何从根Elem XSParticleDecl
带有接口XSElementDeclaration
的Object XSParticleDecl
我希望每个单独元素名称的输出都是该类型。
通常,最好与可为您提供对“架构组件模型”某种访问方式的模式处理器一起使用,而不是直接与源XSD文档一起使用。
Xerces模式API是一种方法,但是我没有经验,也无法为您提供帮助。
撒克逊人提供两种选择:
(a)您可以生成一个代表编译模式的SCM文件。 这是一个XML文件,因此可以使用XSLT或XQuery轻松处理。
(b)有一组扩展功能,从saxon:schema()开始,使您可以直接从XPath探索模式。
我将亲自处理SCM文件。 模式的SCM文件为:
<?xml version="1.0" encoding="UTF-8"?>
<scm:schema xmlns:scm="http://ns.saxonica.com/schema-component-model"
generatedAt="2019-08-22T18:14:23.59+01:00"
xsdVersion="1.1">
<scm:element id="C0"
name="Order"
type="C1"
global="true"
nillable="false"
abstract="false"/>
<scm:complexType id="C1"
base="#anyType"
derivationMethod="restriction"
abstract="false"
variety="element-only">
<scm:modelGroupParticle minOccurs="1" maxOccurs="1">
<scm:sequence>
<scm:elementParticle minOccurs="1" maxOccurs="1" ref="C2"/>
<scm:elementParticle minOccurs="1" maxOccurs="1" ref="C3"/>
<scm:elementParticle minOccurs="1" maxOccurs="1" ref="C4"/>
<scm:elementParticle minOccurs="1" maxOccurs="1" ref="C5"/>
</scm:sequence>
</scm:modelGroupParticle>
<scm:finiteStateMachine initialState="0">
<scm:state nr="0">
<scm:edge term="C2" to="1"/>
</scm:state>
<scm:state nr="1">
<scm:edge term="C3" to="2"/>
</scm:state>
<scm:state nr="2">
<scm:edge term="C4" to="3"/>
</scm:state>
<scm:state nr="3">
<scm:edge term="C5" to="4"/>
</scm:state>
<scm:state nr="4" final="true"/>
</scm:finiteStateMachine>
</scm:complexType>
<scm:element id="C2"
name="OrderNo"
type="#float"
global="false"
containingComplexType="C1"
nillable="false"
abstract="false"/>
<scm:element id="C3"
name="OrderDate"
type="#string"
global="false"
containingComplexType="C1"
nillable="false"
abstract="false"/>
<scm:element id="C4"
name="Name"
type="#string"
global="false"
containingComplexType="C1"
nillable="false"
abstract="false"/>
<scm:element id="C5"
name="NameNo"
type="#float"
global="false"
containingComplexType="C1"
nillable="false"
abstract="false"/>
</scm:schema>
<?Σ 954c7f5b?>
内置类型使用例如type =“#float”表示,而用户定义的类型将由诸如type="C89"
的引用表示,其中C89是对scm:simpleType
的@id
属性的引用scm:simpleType
scm:schema
元素的scm:simpleType
或scm:complexType
子级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.