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 + -
显示快捷键?