normalizer.cpp

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

CPP
424
字号
    theSerializer->writeNode(myFormTarget, *node);}int main(int argc, char **argv) {    Normalizer *normalizer = new Normalizer();    DOMDocument *doc = normalizer->createDocument();    bool *tmpTrue = new bool(true);    bool *tmpFalse = new bool(false);    DOMElement* docFirstElement = doc->createElementNS(X("http://www.test.com"),X("docEle"));    doc->appendChild(docFirstElement);    DOMElement* docFirstElementChild = doc->createElementNS(X("http://www.test2.com"),X("docEleChild"));    docFirstElement->appendChild(docFirstElementChild);    //create default ns    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //add in binding    docFirstElement->setPrefix(X("po"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //use default    DOMElement* docFirstElementChildChild = doc->createElementNS(X("http://www.test2.com"),X("docEleChildChild"));    docFirstElementChild->appendChild(docFirstElementChildChild);    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    // this block is needed to destroy the XMLBuffer     {        //use a binding        XMLBuffer buf;        buf.set(XMLUni::fgXMLNSString);        buf.append(chColon);        buf.append(X("po2"));        docFirstElementChild->removeAttributeNS(XMLUni::fgXMLNSURIName, XMLUni::fgXMLNSString);        docFirstElement->removeAttributeNS(XMLUni::fgXMLNSURIName, XMLUni::fgXMLNSString);        docFirstElement->setAttributeNS(XMLUni::fgXMLNSURIName, buf.getRawBuffer(), X("http://www.test2.com"));        docFirstElementChild->setPrefix(X("po2"));        doc->normalizeDocument();        normalizer->serializeNode(doc);        XERCES_STD_QUALIFIER cout << "\n\n";    }    //some siblngs to ensure the scope stacks are working    docFirstElementChildChild = doc->createElementNS(X("http://www.test3.com"),X("docEleChildChild2"));    docFirstElementChild->appendChild(docFirstElementChildChild);    docFirstElementChildChild = doc->createElementNS(X("http://www.test4.com"),X("po4:docEleChildChild3"));    docFirstElementChild->appendChild(docFirstElementChildChild);    docFirstElementChildChild = doc->createElementNS(X("http://www.test4.com"),X("po4:docEleChildChild4"));    docFirstElementChild->appendChild(docFirstElementChildChild);    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //conflicting prefix    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, X("po4"), X("conflict"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";        //conflicting default    docFirstElementChildChild = doc->createElementNS(X("http://www.test4.com"),X("docEleChildChild5"));    docFirstElementChild->appendChild(docFirstElementChildChild);    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, XMLUni::fgXMLNSString, X("conflict"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //set the xmlns to ""    DOMElement *noNamespaceEle = doc->createElementNS(X(""),X("noNamespace"));    docFirstElementChildChild->appendChild(noNamespaceEle);    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //now lets do a bit off attribute testing on the doc ele    docFirstElement->setAttributeNS(X("http://testattr.com"), X("attr1"), X("value"));    docFirstElement->setAttributeNS(X("http://testattr.com"), X("attr2"), X("value"));    docFirstElement->setAttributeNS(X("http://testattr2.com"), X("attr3"), X("value"));    docFirstElement->setAttributeNS(X("http://www.test.com"), X("attr4"), X("value"));    docFirstElement->setAttributeNS(X("http://testattr2.com"), X("po:attr5"), X("value"));    docFirstElement->setAttributeNS(X("http://testattr2.com"), X("poFake:attr6"), X("value"));    docFirstElement->setAttributeNS(X("http://testattr3.com"), X("po3:attr7"), X("value"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //and now on one of its children    docFirstElementChildChild->setAttributeNS(X("http://testattr.com"), X("attr1"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr.com"), X("attr2"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr2.com"), X("attr3"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://www.test.com"), X("attr4"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr2.com"), X("po:attr5"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr2.com"), X("poFake:attr6"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr3.com"), X("po3:attr7"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://testattr4.com"), X("po4:attr8"), X("value"));        //test for a clash with our NSx attrs    docFirstElementChildChild->setAttributeNS(X("http://testclash.com"), X("NS1:attr9"), X("value"));    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, X("xmlns:NS1"), X("http://testclash.com"));    //clash with standard prefix    docFirstElementChildChild->setAttributeNS(X("http://testattr5.com"), X("po:attr10"), X("value"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //2 prefix with the same uri    docFirstElementChildChild = doc->createElementNS(X("http://www.uri1.com"),X("docEleChildChild6"));    docFirstElementChild->appendChild(docFirstElementChildChild);    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, X("xmlns:uri1"), X("http://www.uri1.com"));    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, X("xmlns:uri1b"), X("http://www.uri1.com"));    docFirstElementChildChild->setAttributeNS(X("http://www.uri1.com"), X("uri1:attr1"), X("value"));    docFirstElementChildChild->setAttributeNS(X("http://www.uri1.com"), X("uri1b:attr2"), X("value"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //check to see we use the nearest binding and for more inheritence    DOMElement *docFirstElementChildChildChild = doc->createElementNS(X("http://www.uri1.com"),X("docEleChildChildChild"));    docFirstElementChildChild->appendChild(docFirstElementChildChildChild);    docFirstElementChildChild->setAttributeNS(XMLUni::fgXMLNSURIName, X("xmlns:nearerThanPo"), X("http://www.test.com"));    docFirstElementChildChildChild->setAttributeNS(X("http://testattr.com"), X("attr2"), X("value"));    docFirstElementChildChildChild->setAttributeNS(X("http://www.test.com"), X("attr1"), X("value"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    XERCES_STD_QUALIFIER cout << "\n\n";    //NS1.1 stuff    //test creating default prefix when NS1 has been set to ""    noNamespaceEle->setAttributeNS(XMLUni::fgXMLNSURIName, X("xmlns:NS1"), X(""));    DOMElement *noNamespaceChild = doc->createElementNS(X("http://testclash.com"),X("testing1.1Stuff"));    noNamespaceEle->appendChild(noNamespaceChild);    doc->normalizeDocument();    normalizer->serializeNode(doc);    noNamespaceChild = doc->createElementNS(X("http://testclash.com"),X("NS1:testing1.1Stuff"));    noNamespaceEle->appendChild(noNamespaceChild);        noNamespaceChild->setAttributeNS(X("http://www.someRandomUri.com"), X("attr"), X("value"));    doc->normalizeDocument();    normalizer->serializeNode(doc);    //check error conditions    XERCES_STD_QUALIFIER cout << "error conditions" << XERCES_STD_QUALIFIER endl;    DOMConfigurationImpl *cImpl = new ((DOMDocumentImpl*)doc) DOMConfigurationImpl();    ((DOMDocumentImpl*)doc)->setDOMConfiguration(cImpl);    cImpl->setErrorHandler(normalizer);    cImpl->setParameter(X("namespaces"), (void*)tmpTrue);    DOMElement *level1Node = doc->createElement(X("level1Node"));    docFirstElement->appendChild(level1Node);    doc->normalizeDocument();    docFirstElement->removeChild(level1Node);    docFirstElement->setAttribute(X("level1Attr"), X("level1"));    doc->normalizeDocument();    docFirstElement->removeAttribute(X("level1Attr"));    //cant check this as Xerces does not let us do it    //    noNamespaceChild->setAttributeNS(X("http://www.someRandomUri.com"), X("xmlns"), X("value"));    //    doc->normalizeDocument();    //lets do a sanity test on a comment    DOMComment *comment = doc->createComment(X("some comment"));    docFirstElement->appendChild(comment);    doc->normalizeDocument();    normalizer->serializeNode(doc);    cImpl->setParameter(X("comments"), (void*)tmpFalse);    docFirstElement->appendChild(comment);    doc->normalizeDocument();    normalizer->serializeNode(doc);    //and on a CDATA    DOMCDATASection *cData = doc->createCDATASection(X("some cdata"));    docFirstElement->appendChild(cData);    doc->normalizeDocument();    normalizer->serializeNode(doc);    cImpl->setParameter(X("cdata-sections"), (void*)tmpFalse);    docFirstElement->appendChild(cData);    doc->normalizeDocument();    normalizer->serializeNode(doc);    delete normalizer;    delete tmpTrue;    delete tmpFalse;    return 0;}

⌨️ 快捷键说明

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