Xerces2-j XML模式属性/元素声明数据类型
问题描述:
我使用的是Apache的Xerces2-j来解析我的XSD。我正在尝试获取XSD中元素/属性声明的数据类型信息。Xerces2-j XML模式属性/元素声明数据类型
下面是一个例子XSD:
<xs:element name="Pretzel">
...
<xs:attribute name="Flavor" type="xs:string"/>
<xs:attribute name="ProductID" type="xs:nonNegativeInteger"/>
...
</xs:element>
在这种情况下,我想获得风味和的ProductID属性的数据类型。根据W3C Schema API和its Xerces2-j implementation,XSAttributeDeclaration的getActualVCType()会得到我想要的。但对我来说,该方法总是返回45,这是UNAVAILABLE_DT。这是Xerces2-j中的错误,还是我只是理解API错误?如果我是,我会很感激,如果有人能指出我在这里正确的方向。
答
您正在寻找使用方法
XSAttributeDeclaration.getTypeDefinition(); // returns XSSimpleTypeDefinition
简单的类型和/或可能
复杂类型。
的方法getActualVCType()已被弃用,其替代呼叫getValueConstraintValue()。getActualValueType()查找到一个所谓的value constraint 这是不是你在找什么。这种说法也由代码XSAttributeDecl.java支持:
// variable definition
48 // value constraint type: default, fixed or !specified
49 short fConstraintType = XSConstants.VC_NONE;
和
183 public short getActualVCType() {
184 return getConstraintType() == XSConstants.VC_NONE ?
185 XSConstants.UNAVAILABLE_DT :
186 fDefault.actualValueType;
187 }
与
136
137 public short getConstraintType() {
138 return fConstraintType;
139 }
建议您确实越来越UNAVAILABLE_DT,因为它没有设置。我建议看看XSSimpleTypeDefinition的方法,它看起来很有希望。
碰撞。没人知道? :( – 2010-11-17 14:19:19