String () { final XmlElement owner = (XmlElement)getElement(); final XmlAttlistDecl[] attLists= owner instanceof XmlElementDecl ? XmlElementDescriptorImpl.getCachedAttributeDeclarations(owner): XmlAttlistDecl.EMPTY_ARRAY; if (attLists.length > 0) { Map<String,XmlAttributeDecl> attrMap = null; final String name = getElement().getName(); for(XmlAttlistDecl a:attLists) { final String aname = a.getName(); if (!Objects.equals(aname, name)) continue; if (attrMap == null) attrMap = new LinkedHashMap<>(); for(XmlAttributeDecl d : a.getAttributeDecls()) { attrMap.put(d.getName(), d); } } StringBuilder b = null; if (attrMap != null) { for(Map.Entry<String,XmlAttributeDecl> e:attrMap.entrySet()) { if (b == null) b = new StringBuilder(); else b.append(", "); b.append(e.getKey()); final XmlAttributeDecl attributeDecl = e.getValue(); String type = null; if (attributeDecl.isIdAttribute()) { type = ID; } else if (attributeDecl.isIdRefAttribute()) { type = IDREF; } else if (attributeDecl.isEnumerated()) { type = ENUM; } if (attributeDecl.isAttributeFixed()) { if (type == null) type = FIXED; else type += " " + FIXED; } else if (attributeDecl.isAttributeRequired()) { if (type == null) type = REQUIRED; else type += " " + REQUIRED; } else if (attributeDecl.isAttributeImplied()) { if (type == null) type = IMPLIED; else type += " " + IMPLIED; } if (type != null) b.append(':').append(type); final XmlAttributeValue value = attributeDecl.getDefaultValue(); if (value != null) b.append("=").append(value); } } if (b != null) return b.toString(); } return super.getLocationString(); }