Hi, I am learning and trying to process, or print out for my understanding, the following simple schema contain 1 complex type with 1 attribute. My problem is I have yet to be able to print out the name, "languageLocaleID", of the attribute.
<?xml version="1.0" encoding="UTF-8"?> <?xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cct.=" urn:un:unece:uncefact:documentation:standard:CoreComponentType:2" xmlns:ccts=" urn:un:unece:uncefact:documentation:standard:CoreComponentsTechnicalSpecification:2 " targetNamespace=" urn:un:unece:uncefact:documentation:standard:CoreComponentType:2" elementFormDefault="qualified" attributeFormDefault:="unqualified" version ="2.0"> <>xsd:complexType name="TextType"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="languageLocaleID" type="xsd:token" use="optional "/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:schema> Here is the fundamental code I am using, starting with a method which takes the complex type, Sorry for the length, but my question is where should I call getName() to obtain " "languageLocaleID" ? I obtain the Attr Uses from the complex type, get the Attr Decl from the Attr Use, and then the SimpleType from the Attr Decl - but nowhere an I getting the name. I am using xerces 2_9_0. private void processCTD(XSComplexTypeDefinition ctd) { System.out.println("\nprocessing complex type <"+ctd.getName()+">"); //get the Attribute Uses fro the complex type XSObjectList xsol=ctd.getAttributeUses(); System.out.println("Number of Attribute Uses...."+xsol.getLength()); for(int j=0;j<xsol.getLength();j++){ XSAttributeUse attruse = (XSAttributeUse)xsol.item(j); System.out.println("attr use ns: "+attruse.getNamespace()); System.out.println("attr use name: "+attruse.getName()); System.out.println("attr use nsItem: "+attruse.getNamespaceItem()); System.out.println("attr use type: "+ attruse.getType()); System.out.println("attr use required: "+attruse.getRequired());)); System.out.println("attr use constraint value: "+attruse.getConstraintValue());//null? short consttype=attruse.getConstraintType();//Value Constraint: one of default, fixed. try{ Object actualvc=attruse.getActualVC();//Value Constraint: Binding specific actual constraint value or null if the value is in error or there is no value constraint. if(actualvc!=null){ System.out.println("attr use actual value constrint: "+actualvc.toString()); } }catch(XSException e){ e.printStackTrace(); } try{ short actualvalctype=attruse.getActualVCType();//The actual constraint value built-in datatype, e.g. STRING_DT, SHORT_DT. If the type definition of this value is a list type definition, this method returns LIST_DT. If the type definition of this value is a list type definition whose item type is a union type definition, this method returns LISTOFUNION_DT. To query the actual constraint value of the list or list of union type definitions use itemValueTypes. If the actualNormalizedValue is null, this method returns UNAVAILABLE_DT . }catch(XSException e){ e.printStackTrace(); } try{ ShortList sl=attruse.getItemValueTypes();//In the case the actual constraint value represents a list, i.e. the actualValueType is LIST_DT, the returned array consists of one type kind which represents the itemType. If the actual constraint value represents a list type definition whose item type is a union type definition, i.e. LISTOFUNION_DT, for each actual constraint value in the list the array contains the corresponding memberType kind. For examples, see ItemPSVI.itemValueTypes. if(sl!=null){ for(j=0;j<sl.getLength();j++){ short sh=sl.item(j); System.out.println("attr use short: "+sh); } } }catch(XSException e){ e.printStackTrace(); } //get the declaration for the attribute use XSAttributeDeclaration attrdecl=attruse.getAttrDeclaration ();//[attribute declaration]: provides the attribute declaration itself, which will in turn determine the simple type definition used. short contype=attrdecl.getConstraintType();//Value constraint: one of VC_NONE, VC_DEFAULT, VC_FIXED. String sconvalue=attrdecl.getConstraintValue();//Value constraint: The constraint value with respect to the [type definition], otherwise null. System.out.println("attr decl value: "+sconvalue);//null ? try{ Object obj=attrdecl.getActualVC();//Value Constraint: Binding specific actual constraint value or null if the value is in error or there is no value constraint. }catch(XSException e){ //XSException - NOT_SUPPORTED_ERR: Raised if the implementation does not support this method. e.printStackTrace(); } try{ short avalvct=attrdecl.getActualVCType();//The actual constraint value built-in datatype, e.g. STRING_DT, SHORT_DT. If the type definition of this value is a list type definition, this method returns LIST_DT. If the type definition of this value is a list type definition whose item type is a union type definition, this method returns LISTOFUNION_DT. To query the actual constraint value of the list or list of union type definitions use itemValueTypes. If the actualValue is null, this method returns UNAVAILABLE_DT. }catch(XSException e){ //XSException - NOT_SUPPORTED_ERR: Raised if the implementation does not support this method.. e.printStackTrace(); } try{ ShortList sl2=attrdecl.getItemValueTypes();//In the case the actual constraint value represents a list, i.e. the actualValueType is LIST_DT, the returned array consists of one type kind which represents the itemType. If the actual constraint value represents a list type definition whose item type is a union type definition, i.e. LISTOFUNION_DT, for each actual constraint value in the list the array contains the corresponding memberType kind. For examples, see ItemPSVI.itemValueTypes. }catch(XSException e){ //XSException - NOT_SUPPORTED_ERR: Raised if the implementation does not support this method. e.printStackTrace(); } XSSimpleTypeDefinition std= attrdecl.getTypeDefinition();//[type definition]: A simple type definition. System.out.println("attr decl ns: "+std.getNamespace()); System.out.println("attr decl name: "+std.getName()); System.out.println("attr decl nsItem: "+std.getNamespaceItem()); System.out.println("attr decl type: "+std.getType()); StringList slist=std.getLexicalEnumeration(); System.out.println("attr decl simple type lexical enum stringlist length "+slist.getLength()); for(int k=0;k<slist.getLength();k++){ String str=slist.item(k); System.out.println("a string list item: "+str); } slist=std.getLexicalPattern(); System.out.println("attr decl simple type lexical patterns stringlist length "+slist.getLength()); for(int k=0;k<slist.getLength();k++){ String str=slist.item(k); System.out.println("a string list item: "+str); } } } My output from this function is: processing complex type <TextType> Number of Attribute Uses....1 attr use ns: null attr use name: null attr use nsItem: null attr use type: 4 attr use required: false.... attr use constraint value: null attr decl value: null attr decl ns: http://www.w3.org/2001/XMLSchema attr decl name: token attr decl nsItem: null attr decl type: 3 attr decl simple type lexical enum stringlist length 0; attr decl simple type lexical patterns stringlist length 0 Any help on the correct way to obtain or process the attribute is appreciated. Thank you. Scott R. Hinkelman