dommemtest.cpp

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

CPP
1,486
字号
        TASSERT(dt->getNamespaceURI() == 0);        TASSERT(dt->getPrefix() == 0);        TASSERT(dt->getLocalName() == 0);        TASSERT(!XMLString::compareString(dt->getPublicId(), X("pubId")));        TASSERT(!XMLString::compareString(dt->getSystemId(), X("http://sysId")));        TASSERT(dt->getInternalSubset() == 0);        TASSERT(dt->getOwnerDocument() == 0);        DOMNamedNodeMap* nnm = dt->getEntities();        TASSERT(nnm->getLength() == 0);        nnm = dt->getNotations();        TASSERT(nnm->getLength() == 0);        // release the documentType (dt) which is an orphaned node (does not have the owner)        dt->release();        //        // Qualified name without prefix should also work.        //        dt = impl->createDocumentType(X("docName"), X("pubId"), X("http://sysId"));        TASSERT(dt != 0);        TASSERT(dt->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE);        TASSERT(!XMLString::compareString(dt->getNodeName(), X("docName")));        TASSERT(dt->getNamespaceURI() == 0);        TASSERT(dt->getPrefix() == 0);        TASSERT(dt->getLocalName() == 0);        TASSERT(!XMLString::compareString(dt->getPublicId(), X("pubId")));        TASSERT(!XMLString::compareString(dt->getSystemId(), X("http://sysId")));        TASSERT(dt->getInternalSubset() == 0);        TASSERT(dt->getOwnerDocument() == 0);        // Creating a DocumentType with invalid or malformed qName should fail.        EXCEPTION_TEST(impl->createDocumentType(X("<docName"), X("pubId"), X("http://sysId")), DOMException::INVALID_CHARACTER_ERR);        EXCEPTION_TEST(impl->createDocumentType(X(":docName"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(impl->createDocumentType(X("docName:"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(impl->createDocumentType(X("doc::Name"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(impl->createDocumentType(X("doc:N:ame"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR);        // release the documentType (dt) which is an orphaned node (does not have the owner)        dt->release();    }    //    //  DOMImplementation::CreateDocument    {        DOMImplementation*   impl = DOMImplementationRegistry::getDOMImplementation(X("Core"));        DOMDocumentType*       dt = 0;        DOMDocument*           doc = impl->createDocument(XMLUni::fgZeroLenString, X("a"), dt);        doc->getNodeName();        doc->release();    }    //    {        DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core"));        DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId"));        DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt);        TASSERT(dt->getOwnerDocument() == doc);        TASSERT(doc->getOwnerDocument() == 0);        TASSERT(doc->getNodeType() == DOMNode::DOCUMENT_NODE);        TASSERT(doc->getDoctype() == dt);        TASSERT(!XMLString::compareString(doc->getNodeName(), X("#document")));        TASSERT(doc->getNodeValue() == 0);        TASSERT(doc->getNamespaceURI() == 0);        TASSERT(doc->getPrefix() == 0);        TASSERT(doc->getLocalName() == 0);        DOMElement* el = doc->getDocumentElement();        TASSERT(!XMLString::compareString(el->getLocalName(), X("docName")));        TASSERT(!XMLString::compareString(el->getNamespaceURI(), X("http://document.namespace")));        TASSERT(!XMLString::compareString(el->getNodeName(), X("foo:docName")));        TASSERT(el->getOwnerDocument() == doc);        TASSERT(el->getParentNode() == doc);        TASSERT(!XMLString::compareString(el->getPrefix(), X("foo")));        TASSERT(!XMLString::compareString(el->getTagName(), X("foo:docName")));        TASSERT(el->hasChildNodes() == false);        //        // Creating a second document with the same docType object should fail.        //        try        {            DOMDocument* doc2 = impl->createDocument(X("pubId"), X("foo:docName"), dt);            TASSERT(false);  // should not reach here.        }        catch ( DOMException &e)        {            TASSERT(e.code == DOMException::WRONG_DOCUMENT_ERR);        }        catch (...)        {            TASSERT(false);  // Wrong exception thrown.        }        // release the document, the documentType (dt) still has the owner, and thus no need to release        doc->release();        // Creating a document with null NamespaceURI and DocumentType        doc = impl->createDocument(X("pubId"), X("foo:docName"), 0);        doc->release();        // Namespace tests of createDocument are covered by createElementNS below    }    //    //  CreateElementNS methods    //    {        // Set up an initial (root element only) document.        //        DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core"));        DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId"));        DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt);        DOMElement* rootEl = doc->getDocumentElement();        //        // CreateElementNS        //        DOMElement* ela = doc->createElementNS(X("http://nsa"), X("a:ela"));  // prefix and URI        TASSERT(!XMLString::compareString(ela->getNodeName(), X("a:ela")));        TASSERT(!XMLString::compareString(ela->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(ela->getPrefix(), X("a")));        TASSERT(!XMLString::compareString(ela->getLocalName(), X("ela")));        TASSERT(!XMLString::compareString(ela->getTagName(), X("a:ela")));        DOMElement* elb = doc->createElementNS(X("http://nsb"), X("elb"));    //  URI, no prefix.        TASSERT(!XMLString::compareString(elb->getNodeName(), X("elb")));        TASSERT(!XMLString::compareString(elb->getNamespaceURI(), X("http://nsb")));        TASSERT(!XMLString::compareString(elb->getPrefix(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(elb->getLocalName(), X("elb")));        TASSERT(!XMLString::compareString(elb->getTagName(), X("elb")));        DOMElement* elc = doc->createElementNS(XMLUni::fgZeroLenString, X("elc"));              // No URI, no prefix.        TASSERT(!XMLString::compareString(elc->getNodeName(), X("elc")));        TASSERT(!XMLString::compareString(elc->getNamespaceURI(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(elc->getPrefix(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(elc->getLocalName(), X("elc")));        TASSERT(!XMLString::compareString(elc->getTagName(), X("elc")));        rootEl->appendChild(ela);        rootEl->appendChild(elb);        rootEl->appendChild(elc);        // Badly formed qualified name        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("<a")), DOMException::INVALID_CHARACTER_ERR);        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X(":a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a:")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a::a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a:a:a")), DOMException::NAMESPACE_ERR);        // xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace"        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xml:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace")));        EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("xml:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("xml:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(0,  X("xml:a")), DOMException::NAMESPACE_ERR);        //unlike Attribute, xmlns (no different from foo) can have any namespaceURI for Element        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("xmlns"))->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace")));        TASSERT(!XMLString::compareString(doc->createElementNS(XMLUni::fgZeroLenString, X("xmlns"))->getNamespaceURI(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(doc->createElementNS(0,  X("xmlns"))->getNamespaceURI(), XMLUni::fgZeroLenString));        //unlike Attribute, xmlns:a (no different from foo:a) can have any namespaceURI for Element        //except "" and null        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("xmlns:a"))->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace")));        EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("xmlns:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(0, X("xmlns:a")), DOMException::NAMESPACE_ERR);        //In fact, any prefix != null should have a namespaceURI != 0 or != ""        TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("foo:a"))->getNamespaceURI(), X("http://nsa")));        EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("foo:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createElementNS(0,  X("foo:a")), DOMException::NAMESPACE_ERR);        //Change prefix        DOMElement* elem = doc->createElementNS(X("http://nsa"), X("foo:a"));        elem->setPrefix(X("bar"));        TASSERT(!XMLString::compareString(elem->getNodeName(), X("bar:a")));        TASSERT(!XMLString::compareString(elem->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(elem->getPrefix(), X("bar")));        TASSERT(!XMLString::compareString(elem->getLocalName(), X("a")));        TASSERT(!XMLString::compareString(elem->getTagName(), X("bar:a")));        //The spec does not prevent us from setting prefix to a node without prefix        elem = doc->createElementNS(X("http://nsa"), X("a"));        TASSERT(!XMLString::compareString(elem->getPrefix(), XMLUni::fgZeroLenString));        elem->setPrefix(X("bar"));        TASSERT(!XMLString::compareString(elem->getNodeName(), X("bar:a")));        TASSERT(!XMLString::compareString(elem->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(elem->getPrefix(), X("bar")));        TASSERT(!XMLString::compareString(elem->getLocalName(), X("a")));        TASSERT(!XMLString::compareString(elem->getTagName(), X("bar:a")));        //Special case for xml:a where namespaceURI must be xmlURI        elem = doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("foo:a"));        elem->setPrefix(X("xml"));        elem = doc->createElementNS(X("http://nsa"), X("foo:a"));        EXCEPTION_TEST(elem->setPrefix(X("xml")), DOMException::NAMESPACE_ERR);        //However, there is no restriction on prefix xmlns        elem->setPrefix(X("xmlns"));        //Also an element can not have a prefix with namespaceURI == null or ""        elem = doc->createElementNS(0, X("a"));        EXCEPTION_TEST(elem->setPrefix(X("foo")), DOMException::NAMESPACE_ERR);        elem = doc->createElementNS(XMLUni::fgZeroLenString, X("a"));        EXCEPTION_TEST(elem->setPrefix(X("foo")), DOMException::NAMESPACE_ERR);        //Only prefix of Element and Attribute can be changed        EXCEPTION_TEST(doc->setPrefix(X("foo")), DOMException::NAMESPACE_ERR);        //Prefix of readonly Element can not be changed.        //However, there is no way to create such DOMElement* for testing yet.        // release the document, the documentType (dt) still has the owner, and thus no need to release        doc->release();    }    //    //  CreateAttributeNS methods    //    {        // Set up an initial (root element only) document.        //        DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core"));        DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId"));        DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt);        DOMElement* rootEl = doc->getDocumentElement();        //        // CreateAttributeNS        //        DOMAttr* attra = doc->createAttributeNS(X("http://nsa"), X("a:attra"));       // prefix and URI        TASSERT(!XMLString::compareString(attra->getNodeName(), X("a:attra")));        TASSERT(!XMLString::compareString(attra->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(attra->getPrefix(), X("a")));        TASSERT(!XMLString::compareString(attra->getLocalName(), X("attra")));        TASSERT(!XMLString::compareString(attra->getName(), X("a:attra")));        TASSERT(attra->getOwnerElement() == 0);        DOMAttr* attrb = doc->createAttributeNS(X("http://nsb"), X("attrb"));         //  URI, no prefix.        TASSERT(!XMLString::compareString(attrb->getNodeName(), X("attrb")));        TASSERT(!XMLString::compareString(attrb->getNamespaceURI(), X("http://nsb")));        TASSERT(!XMLString::compareString(attrb->getPrefix(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(attrb->getLocalName(), X("attrb")));        TASSERT(!XMLString::compareString(attrb->getName(), X("attrb")));        TASSERT(attrb->getOwnerElement() == 0);        DOMAttr* attrc = doc->createAttributeNS(XMLUni::fgZeroLenString, X("attrc"));        TASSERT(!XMLString::compareString(attrc->getNodeName(), X("attrc")));        TASSERT(!XMLString::compareString(attrc->getNamespaceURI(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(attrc->getPrefix(), XMLUni::fgZeroLenString));        TASSERT(!XMLString::compareString(attrc->getLocalName(), X("attrc")));        TASSERT(!XMLString::compareString(attrc->getName(), X("attrc")));        TASSERT(attrc->getOwnerElement() == 0);        // Badly formed qualified name        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("<a")), DOMException::INVALID_CHARACTER_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X(":a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a:")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a::a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a:a:a")), DOMException::NAMESPACE_ERR);        // xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace"        TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xml:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace")));        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xml:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xml:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(0,  X("xml:a")), DOMException::NAMESPACE_ERR);        //unlike Element, xmlns must have namespaceURI == "http://www.w3.org/2000/xmlns/"        TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/2000/xmlns/"), X("xmlns"))->getNamespaceURI(), X("http://www.w3.org/2000/xmlns/")));        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xmlns")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xmlns")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(0,  X("xmlns")), DOMException::NAMESPACE_ERR);        //unlike Element, xmlns:a must have namespaceURI == "http://www.w3.org/2000/xmlns/"        TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/2000/xmlns/"), X("xmlns:a"))->getNamespaceURI(), X("http://www.w3.org/2000/xmlns/")));        EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xmlns:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xmlns:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(0,  X("xmlns:a")), DOMException::NAMESPACE_ERR);        //In fact, any prefix != null should have a namespaceURI != 0 or != ""        TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://nsa"), X("foo:a"))->getNamespaceURI(), X("http://nsa")));        EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("foo:a")), DOMException::NAMESPACE_ERR);        EXCEPTION_TEST(doc->createAttributeNS(0,  X("foo:a")), DOMException::NAMESPACE_ERR);        //Change prefix        DOMAttr* attr = doc->createAttributeNS(X("http://nsa"), X("foo:a"));        attr->setPrefix(X("bar"));        TASSERT(!XMLString::compareString(attr->getNodeName(), X("bar:a")));        TASSERT(!XMLString::compareString(attr->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(attr->getPrefix(), X("bar")));        TASSERT(!XMLString::compareString(attr->getName(), X("bar:a")));        //The spec does not prevent us from setting prefix to a node without prefix        TASSERT(!XMLString::compareString(attr->getLocalName(), X("a")));        attr = doc->createAttributeNS(X("http://nsa"), X("a"));        TASSERT(!XMLString::compareString(attr->getPrefix(), XMLUni::fgZeroLenString));        attr->setPrefix(X("bar"));        TASSERT(!XMLString::compareString(attr->getNodeName(), X("bar:a")));        TASSERT(!XMLString::compareString(attr->getNamespaceURI(), X("http://nsa")));        TASSERT(!XMLString::compareString(attr->getPrefix(), X("bar")));        TASSERT(!XMLString::compareString(attr->getLocalName(), X("a")));        TASSERT(!XMLString::compareString(attr->getName(), X("bar:a")));        //Special case for xml:a where namespaceURI must be xmlURI        attr = doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("foo:a"));        attr->setPrefix(X("xml"));        attr = doc->createAttributeNS(X("http://nsa"), X("foo:a"));

⌨️ 快捷键说明

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