我正在使用Apache的Xerces2-j来解析我的XSD。我试图获取XSD中元素/属性声明的数据类型信息。
以下是XSD示例:
<xs:element name="Pretzel">
...
<xs:attribute name="Flavor" type="xs:string"/>
<xs:attribute name="ProductID" type="xs:nonNegativeInteger"/>
...
</xs:element>
在这种情况下,我想获取 Flavor 和 ProductID 属性的数据类型。根据{{3}}和W3C Schema API,XSAttributeDeclaration的getActualVCType()将获得我想要的东西。但对我来说,该方法总是返回45,这是 UNAVAILABLE_DT 。这是Xerces2-j中的错误,还是我只是理解API错误?如果我是,如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:0)
您正在寻找使用方法
XSAttributeDeclaration.getTypeDefinition(); // returns XSSimpleTypeDefinition
表示简单类型和/或可能
XSAttributeDeclaration.getEnclosingCTDefinition(); // returns XSComplexTypeDefinition
表示复杂类型。
方法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的方法,看起来很有希望。