Xerces2-j XML Schema Attribute / Element Declaration数据类型

时间:2010-11-15 15:42:47

标签: java xsd xerces

我正在使用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错误?如果我是,如果有人能指出我正确的方向,我会很感激。

1 个答案:

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