typeinfo.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 973 行 · 第 1/3 页

CPP
973
字号
    DOMTYPEINFOTEST(testAttr->getTypeInfo(), 0, 0, __LINE__);    //anyTestAttr2    testEle = (DOMElement *)back->getNextSibling()->getNextSibling();    back = testEle;    testAttr = testEle->getAttributeNodeNS(X("http://www.secondSchema"), X("attr5"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), 0, 0, __LINE__);    //anyTestMissing    testEle = (DOMElement *)back->getNextSibling()->getNextSibling();    back = testEle;    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("anyTestType"), X(""), __LINE__);    return passed;}bool TypeInfo::testInvaild() {    bool passed = true;    DOMNode *docEle = doc->getDocumentElement();    DOMAttr *testAttr;    DOMTYPEINFOTEST(((DOMElement *)docEle)->getTypeInfo(), X("rootType"), X(""), __LINE__);    //element invalidTest    DOMElement *testEle = findElement(X("invalidTest"));    testAttr = testEle->getAttributeNodeNS(X(""), X("simple"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("stringDerivedType"), X(""), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("invalid"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), 0, 0, __LINE__);    testEle = (DOMElement *)testEle->getFirstChild()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("stringDerivedType"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("baseComplex"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    // this is a "number" of type "base" but it has a xsi:type="stringDerivedType"    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("stringDerivedType"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("baseComplex"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("uType"), X(""), __LINE__);    //an undeclared element does not have anon value. Test this here    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), 0, 0, __LINE__);    DOMElement *testEle2 = (DOMElement *)testEle->getFirstChild()->getNextSibling();    DOMTYPEINFOTEST(testEle2->getTypeInfo(), 0, 0, __LINE__);        testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("attrOnlyType"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("attrOnlyType"), X(""), __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("prohibitedAttrType"), X(""), __LINE__);    return passed;}bool TypeInfo::compareDOMTypeInfo(const DOMTypeInfo *info, const XMLCh* type, const XMLCh* uri) {    return XMLString::equals(info->getName(), type) && XMLString::equals(info->getNamespace(), uri);}bool TypeInfo::testDTD() {    bool passed = true;    DOMElement *testEle = doc->getDocumentElement();    DOMAttr *testAttr;    DOMTYPEINFOTEST(testEle->getTypeInfo(), X(""), X(""), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("cdata"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("CDATA"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("enum"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("ENUMERATION"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("id"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("ID"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("idRef"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("IDREF"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("idRefs"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("IDREFS"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("nmToken"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("NMTOKEN"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("nmTokenDefault"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("NMTOKEN"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("nmTokenDefault2"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("NMTOKEN"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("nmTokens"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("NMTOKENS"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("entity"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("ENTITY"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("entities"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("ENTITIES"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("notation"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("NOTATION"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("noDecl"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("CDATA"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    testAttr = testEle->getAttributeNode(X("xmlns:foo"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), X("CDATA"), X("http://www.w3.org/TR/REC-xml"), __LINE__);    return passed;}bool TypeInfo::combinedTest() {    bool passed = true;    DOMNode *docEle = doc->getDocumentElement();    DOMAttr *testAttr;    DOMElement *testEle = doc->getDocumentElement();    DOMTYPEINFOTEST(testEle->getTypeInfo(), X("rootType"), X(""), __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("attBoth"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), SchemaSymbols::fgDT_STRING, SchemaSymbols::fgURI_SCHEMAFORSCHEMA, __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("attSchema"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), SchemaSymbols::fgDT_STRING, SchemaSymbols::fgURI_SCHEMAFORSCHEMA, __LINE__);    testAttr = testEle->getAttributeNodeNS(X(""), X("attDTD"));    DOMTYPEINFOTEST(testAttr->getTypeInfo(), 0, 0, __LINE__);    testEle = (DOMElement *)testEle->getFirstChild()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), SchemaSymbols::fgDT_STRING, SchemaSymbols::fgURI_SCHEMAFORSCHEMA, __LINE__);    testEle = (DOMElement *)testEle->getNextSibling()->getNextSibling();    DOMTYPEINFOTEST(testEle->getTypeInfo(), 0, 0, __LINE__);    return passed;}DOMElement* TypeInfo::findElement(const XMLCh *name) const {    DOMNode *toTest = doc->getDocumentElement()->getFirstChild();    while(!XMLString::equals(toTest->getNodeName(), name)) {        toTest = toTest->getNextSibling();    }    return (DOMElement *)toTest;}int main(int argc, char **argv){    bool passed = true;    TypeInfo ti;    try {        //first the combined DTD/Schema scanner        ti.parser = new XercesDOMParser;        ti.parser->setValidationScheme(XercesDOMParser::Val_Auto);        ti.parser->setCreateSchemaInfo(true);        ti.parser->setDoNamespaces(true);        ti.parser->setDoSchema(true);        ti.parser->parse("data/TypeInfo.xml");        ti.doc = ti.parser->getDocument();    }    catch (...) {        XERCES_STD_QUALIFIER cerr << "parsing data/TypeInfo.xml failed at line" <<  __LINE__ << XERCES_STD_QUALIFIER endl;        delete ti.parser;        return false;    }    // test only if we got a doc    if (ti.doc) {        passed &= ti.testInBuiltTypesOnAttributes(true);        passed &= ti.testInBuiltTypesOnElements();        passed &= ti.testSimpleDerived();        passed &= ti.testComplexTypes();        passed &= ti.testUnions();        passed &= ti.testAnonymous();        passed &= ti.testXsiTypes();        passed &= ti.testAnys();        passed &= ti.testInvaild();    }    else        XERCES_STD_QUALIFIER cout << "DOMTypeInfo test at line " << __LINE__ << "was not carried out" << XERCES_STD_QUALIFIER endl;    delete ti.parser;    //lets do the same for the just schema scanner    try {        ti.parser = new XercesDOMParser;        ti.parser->setValidationScheme(XercesDOMParser::Val_Auto);        ti.parser->setCreateSchemaInfo(true);        ti.parser->setDoNamespaces(true);        ti.parser->setDoSchema(true);        ti.parser->useScanner(X("SGXMLScanner"));        ti.parser->parse("data/TypeInfoNoDTD.xml");        ti.doc = ti.parser->getDocument();    }    catch (...) {        XERCES_STD_QUALIFIER cerr << "parsing data/TypeInfoNoDTD.xml failed at line" <<  __LINE__ << XERCES_STD_QUALIFIER endl;        delete ti.parser;        return false;    }    // test only if we got a doc    if (ti.doc) {        passed &= ti.testInBuiltTypesOnAttributes(false);        passed &= ti.testInBuiltTypesOnElements();        passed &= ti.testSimpleDerived();        passed &= ti.testComplexTypes();        passed &= ti.testUnions();        passed &= ti.testAnonymous();        passed &= ti.testXsiTypes();        passed &= ti.testAnys();        passed &= ti.testInvaild();    }    else        XERCES_STD_QUALIFIER cout << "DOMTypeInfo test at line " << __LINE__ << "was not carried out" << XERCES_STD_QUALIFIER endl;    delete ti.parser;    //now default for DTD    try {        ti.parser = new XercesDOMParser;        ti.parser->setValidationScheme(XercesDOMParser::Val_Auto);        ti.parser->setCreateSchemaInfo(true);        ti.parser->parse("data/TypeInfoJustDTD.xml");        ti.doc = ti.parser->getDocument();    }    catch (...) {        XERCES_STD_QUALIFIER cerr << "parsing data/TypeInfoJustDTD.xml failed at line" <<  __LINE__ << XERCES_STD_QUALIFIER endl;        delete ti.parser;        return false;    }    // test only if we got a doc    if (ti.doc) {        passed &= ti.testDTD();    }    else        XERCES_STD_QUALIFIER cout << "DOMTypeInfo test at line " << __LINE__ << "was not carried out" << XERCES_STD_QUALIFIER endl;    delete ti.parser;    //and specific scanner    try {        ti.parser = new XercesDOMParser;        ti.parser->setValidationScheme(XercesDOMParser::Val_Auto);        ti.parser->setCreateSchemaInfo(true);        ti.parser->useScanner(X("DGXMLScanner"));        ti.parser->parse("data/TypeInfoJustDTD.xml");        ti.doc = ti.parser->getDocument();    }    catch (...) {        XERCES_STD_QUALIFIER cerr << "parsing data/TypeInfoJustDTD.xml failed at line" <<  __LINE__ << XERCES_STD_QUALIFIER endl;        delete ti.parser;        return false;    }    // test only if we got a doc    if (ti.doc) {        passed &=  ti.testDTD();    }    else        XERCES_STD_QUALIFIER cout << "DOMTypeInfo test at line " << __LINE__ << "was not carried out" << XERCES_STD_QUALIFIER endl;    delete ti.parser;    try {        ti.parser = new XercesDOMParser;        ti.parser->setValidationScheme(XercesDOMParser::Val_Auto);        ti.parser->setCreateSchemaInfo(true);        ti.parser->setDoNamespaces(true);        ti.parser->setDoSchema(true);        ti.parser->parse("data/combined.xml");        ti.doc = ti.parser->getDocument();    }    catch (...) {        XERCES_STD_QUALIFIER cerr << "parsing data/combined.xml failed at line" <<  __LINE__ << XERCES_STD_QUALIFIER endl;        delete ti.parser;        return false;    }    // test only if we got a doc    if (ti.doc) {        passed &= ti.combinedTest();    }    else        XERCES_STD_QUALIFIER cout << "DOMTypeInfo test at line " << __LINE__ << "was not carried out" << XERCES_STD_QUALIFIER endl;    delete ti.parser;    if (!passed) {        XERCES_STD_QUALIFIER cerr << "test failed" << XERCES_STD_QUALIFIER endl;        return 4;    }    XERCES_STD_QUALIFIER cerr << "Test Run Successfully" << XERCES_STD_QUALIFIER endl;    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?