⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsertest.cpp

📁 symbian 下的解析xml文件的源代码 个人感觉这个比较简单
💻 CPP
字号:
/*
 * Contains unit tests for the EAXP XML/SAX parser
 */

#include <e32base.h>
#include <e32cons.h>
#include <e32svr.h>

#include "ParserTest.h"
#include "eaxp_dom.h"

LOCAL_D CEAXPParser* parser; 

CSAXListener::CSAXListener()
{
}

void CSAXListener::StartElement(const TDesC &aName, 
                                const TDesC &aNamespace, 
                                const RAttributeList &aAttrList)
{
    RDebug::Print(_L("StartElement(): name: %S, namespace: %S"), &aName, &aNamespace);

    for( TInt i = 0; i < aAttrList.Count(); i++ ) {
        const CAttribute *attr = aAttrList[i];

        RDebug::Print(_L("attr %d: name=%S, ns=%S, value=%S"), 
            i, &(attr->GetName()), &(attr->GetNamespace()), &(attr->GetValue()));
    }
}

void CSAXListener::EndElement(const TDesC &aName, const TDesC &aNamespace)
{
    RDebug::Print(_L("EndElement(): name: '%S', namespace: '%S'"), &aName, &aNamespace);
}

void CSAXListener::FreeText(const TDesC &aText)
{
    RDebug::Print(_L("FreeText(): '%S'"), &aText);
}

void CSAXListener::ParsingError(const TDesC &aReason)
{
    RDebug::Print(_L("ParsingError(): %S"), &aReason);
}

void CSAXListener::Comment( const TDesC& aCommentText )
    {
    RDebug::Print(_L("Comment(): '%S'"), &aCommentText );
    }

void RunTestL(const TDesC &aXML, TBool aShouldSucceed)
{
    RDebug::Print(_L("Testing XML: %S"), &aXML);
    if( parser->ParseL(aXML) != aShouldSucceed ) {
        RDebug::Print(_L("-> FAILED!"));
    } else {
        RDebug::Print(_L("-> OK"));
    }
}

////////////////////////
// THE TEST CASES
////////////////////////

void RunDomTest1L()
    {
    __UHEAP_MARK;

    CDomDocumentNode* document = CDomDocumentNode::NewLC();
    CDomElementNode* root = CDomElementNode::NewLC( _L("Kala"), _L("myns") );
    document->AddChildL( root );
    CleanupStack::Pop( root );
    root->AddAttributeL( _L("attr1"), _L("ns1"), _L("value <>&\"\' ends.") );

    CDomTextNode* text = CDomTextNode::NewLC( _L("Text node <>&\"\' ends.") );
    root->AddChildL( text );
    CleanupStack::Pop( text );

    HBufC* xml = document->GetXmlLC();
    RDebug::Print( _L("XML=%S"), xml );
    CleanupStack::PopAndDestroy( xml );

    CleanupStack::PopAndDestroy( document );

    __UHEAP_MARKEND;
    }

// OK:
_LIT(KTestOK1, "<ns1:tag1>\n<tag2 attr2=\"kissa\"   k=\"p\"/>\n</ns1:tag1>\n");
_LIT(KTestOK2, "<a b=\"kala\" c=\"kissa\" />\n<dg/>");
_LIT(KTestOK3, "\n<a>Kissa kala Koira!</a>\n<b>Foo bar </b> orror\n");
_LIT(KTestOK4, "<?xml version=\"1.0\"?>\n<abc><def></def>Test</abc>");
_LIT(KTestOK5, "<a>Pete &amp; Mary do &quot;stuff&quot;</a>");
_LIT(KTestOK6, "<a b=\"Vodka &amp; beer!\" >&apos;Stuff&apos;</a>");
_LIT(KTestOK7, "<a><![CDATA[room \"for\" <free> [&text&]!]]></a>");
_LIT(KTestOK8, "<tag my-ns:attr=\"xsd:string\" />");
_LIT(KTestOK9, "\n<a\n attr1=\"kala\"\n   attr2=\"&quot;kissa&quot;\"\n  />\n");
_LIT(KTestOK10, "<a ns1:arg=\"first\n\n\n  second\nthird\"/>");
_LIT(KTestOK11, "<a><![CDATA[hula\n\nbaloo!<kissa\"koira>kala/]]></a>");
_LIT(KTestOK12, "<a><![CDATA[kissa;kala\nkoira:kissa!;kala]]></a>");
_LIT(KTestOK13, "<a attr1=\"wtf can't this handle; that semicolon?\" />");
_LIT(KTestOK14, "<a><!-- simple comment --></a>\n" );
_LIT(KTestOK15, "<?xml version=\"1.0\"?>\n \n<!-- this is\na multiline\ncomment -->\n<node />\n");

// fail:
_LIT(KTestFail1, "<t attr=\"kis>sa\" />");
_LIT(KTestFail2, "<a><b:> kissa</b:></a>");
_LIT(KTestFail3, "<:a><ti/></:a>");
_LIT(KTestFail4, "<a>\n<b>Bad escape: &fails;</b></a>");
_LIT(KTestFail5, "< a/>");
_LIT(KTestFail6, "<a>Bad end tag< /a>");

void RunAllTestsL()
{
    RunTestL(KTestOK1, ETrue);
    RunTestL(KTestOK2, ETrue);
    RunTestL(KTestOK3, ETrue);
    RunTestL(KTestOK4, ETrue);
    RunTestL(KTestOK5, ETrue);
    RunTestL(KTestOK6, ETrue);
    RunTestL(KTestOK7, ETrue);
    RunTestL(KTestOK8, ETrue);
    RunTestL(KTestOK9, ETrue);
    RunTestL(KTestOK10, ETrue);
    RunTestL(KTestOK11, ETrue);
    RunTestL(KTestOK12, ETrue);
    RunTestL(KTestOK13, ETrue);
    RunTestL(KTestOK14, ETrue);
    RunTestL(KTestOK15, ETrue);

    RunTestL(KTestFail1, EFalse);
    RunTestL(KTestFail2, EFalse);
    RunTestL(KTestFail3, EFalse);
    RunTestL(KTestFail4, EFalse);
    RunTestL(KTestFail5, EFalse);
    RunTestL(KTestFail6, EFalse);

    RunDomTest1L();
}

void MainImplL()
{
    __UHEAP_MARK;
    CSAXListener *listener = new (ELeave) CSAXListener();
    CleanupStack::PushL(listener);

    __UHEAP_MARK;
    parser = CEAXPParser::NewLC(*listener);

    __UHEAP_MARK;
	TRAPD(error, RunAllTestsL()); 
    if( error != KErrNone ) {
        RDebug::Print(_L("error: %d"), error);
    }
    __UHEAP_MARKEND;

    CleanupStack::PopAndDestroy(); // parser
    __UHEAP_MARKEND;
	CleanupStack::PopAndDestroy(); // listener
    __UHEAP_MARKEND;
}

GLDEF_C TInt E32Main() 
{
	__UHEAP_MARK;

    CTrapCleanup* cleanup = CTrapCleanup::New(); 

    TRAPD(err, MainImplL());

    delete cleanup; 

	__UHEAP_MARKEND;

    return 0; 
}


⌨️ 快捷键说明

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