#include #include #include #include #include #include int main(int argc, char **argv) { if (argc != 2) { qDebug("Missing argument: filename of schema"); return 1; } QString filename = argv[1]; QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { qDebug("Can't open file %s", qPrintable(file.fileName())); return 1; } NSManager namespaceManager; MessageHandler messageHandler; ParserContext context; context.setNamespaceManager(&namespaceManager); context.setMessageHandler(&messageHandler); XSD::Parser parser; if (!parser.parseFile(&context, file)) { qDebug() << "Error parsing file " << filename; return 1; } XSD::Types types = parser.types(); const XSD::SimpleType::List simpleTypes = types.simpleTypes(); for (int i = 0; i < simpleTypes.count(); ++i) { XSD::SimpleType t = simpleTypes[i]; qDebug() << "SimpleType: " << t.name() << t.baseTypeName().qname() << t.subType(); qDebug() << "FacetType: " << t.facetType(); if (t.facetType() == XSD::SimpleType::ENUM) { qDebug() << " ENUMS " << t.facetEnums(); } } const XSD::ComplexType::List complexTypes = types.complexTypes(); for (int i = 0; i < complexTypes.count(); ++i) { qDebug("ComplexType: %s %s", qPrintable(complexTypes[i].name()), qPrintable(complexTypes[i].baseTypeName().qname())); const XSD::Element::List elements = complexTypes[i].elements(); for (int j = 0; j < elements.count(); ++j) { qDebug("\tElement: %s %s", qPrintable(elements[j].name()), qPrintable(elements[j].type().qname())); } const XSD::Attribute::List attributes = complexTypes[i].attributes(); for (int j = 0; j < attributes.count(); ++j) { qDebug("\tAttribute: %s %s", qPrintable(attributes[j].name()), qPrintable(attributes[j].type().qname())); } } const XSD::Element::List elements = types.elements(); for (int i = 0; i < elements.count(); ++i) { qDebug("Element: %s %s", qPrintable(elements[i].name()), qPrintable(elements[i].type().qname())); const auto annotations = elements[i].annotations(); for (const XSD::Annotation &a : annotations) { qDebug() << " Annotation:" << a.domElement().tagName(); } } const XSD::Attribute::List attributes = types.attributes(); for (int i = 0; i < attributes.count(); ++i) { qDebug("Attribute: %s %s", qPrintable(attributes[i].name()), qPrintable(attributes[i].type().qname())); } const XSD::AttributeGroup::List attributeGroups = types.attributeGroups(); for (int i = 0; i < attributeGroups.count(); ++i) { qDebug("AttributeGroup: %s", qPrintable(attributeGroups[i].name())); } const auto parserAnnotations = parser.annotations(); for (const XSD::Annotation &a : parserAnnotations) { qDebug() << "Annotation:" << a.domElement().tagName(); } return 0; }