有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Xerces2j XML模式属性/元素声明数据类型

我正在使用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>

在本例中,我希望获得FlavorProductID属性的数据类型。根据W3C Schema APIits Xerces2-j implementation,XSAttributeDeclaration的getActualVCType()将得到我想要的。但对我来说,该方法总是返回45,这是不可用的。这是Xerces2-j中的一个bug,还是我只是理解了API的错误?如果是的话,如果有人能给我指出正确的方向,我将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    您希望使用该方法

    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    }
    

    这表明您确实变得不可用,因为它没有设置。我建议研究XSSimpleTypeDefinition的方法,它对我来说很有希望