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 APIits Xerces2-j implementation,XSAttributeDeclaration的getActualVCType()会得到我想要的。但对我来说,该方法总是返回45,这是UNAVAILABLE_DT。这是Xerces2-j中的错误,还是我只是理解API错误?如果我是,我会很感激,如果有人能指出我在这里正确的方向。

+0

碰撞。没人知道? :( – 2010-11-17 14:19:19

您正在寻找使用方法

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的方法,它看起来很有希望。