• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            網(wǎng)絡(luò)服務(wù)器軟件開發(fā)/中間件開發(fā),關(guān)注ACE/ICE/boost

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks

            Xerces C++ 學(xué)習(xí)筆記

            Xerces C++ 學(xué)習(xí)筆記

            1. ? 初始化平臺:

            XMLPlatformUtils::Initialze()

            2. ? 銷毀平臺:

            XMLPlatformUtils::Terminate();

            3. ? 加載分析報文

            XercesDOMParser? *parser = new XercesDOMParser();

            Parser->parse( 參數(shù) ); 這個參數(shù)可以直接是文件名,也可以是內(nèi)存的數(shù)據(jù),具體的查看 API

            4. ? 數(shù)據(jù)格式轉(zhuǎn)換

            XMLString.transcode() 這個方法有多個重載,既可以把 XMLCh * 格式的數(shù)據(jù)轉(zhuǎn)換成 char * 的數(shù)據(jù),也可以把 char * 的數(shù)據(jù)轉(zhuǎn)換成 XMLCh *, 我們也可以利用這個函數(shù)來初始化 XMLCh 格式類型的數(shù)組,比如 XMLCh temp[100];

            ??????????????????????????? XMLString.transcode(“LS”,temp,99);// 用“ LS ”初始化 temp 這個數(shù)組的內(nèi)容。

            5. ? 分析報文后,如何得到文檔的樹型結(jié)構(gòu)

            DOMDocument *xmlDoc = parser->getDocument();

            6. ? 得到樹型結(jié)構(gòu)后,如何得到第一個根節(jié)點

            DOMElement *root = xmlDoc->getDocumentElement();

            7. ? 如何遍歷文檔的結(jié)構(gòu)

            遍歷一個樹型的文檔結(jié)構(gòu)有三種方法。

            1 .使用 DOMNodeIterator

            DOMNodeIterator *iterator = xmlDoc->createNodeIterator(root, DOMNodeFilter::SHOW_TEXT,? NULL, true);

            for ( DOMNode * current = (DOMNode *)iterator->nextNode(); current != 0; current = (DOMNode *)iterator->nextNode() )

            {

            ??????? string strValue = XMLString::transcode(current->getNodeValue());

            ??????? std::cout <<strValue<<endl;

            ?}// 以上就可以把 xml 文檔中的屬性為 NODETEXT 節(jié)點的內(nèi)容給打印出來。

            2 .使用 DOMTreeWalker

            D OMTreeWalker *walker =??xmlDoc->createTreeWalker(root, DOMNodeFilter::SHOW_TEXT, NULL, true);

            f or (DOMNode *current = walker->nextNode(); current != 0; current = walker->nextNode() )? ?

            ?{

            ? ?? ?char *strValue = XMLString::transcode( current->getNodeValue() );? ? ?std::cout <<strValue;
            ? ?? ?? ?? ?XMLString::release(&strValue);? ?

            }

            3 .使用子節(jié)點直接遍歷樹型結(jié)構(gòu)

            ?? DOMNode *n = (DOMNode*)xmlDoc->getDocumentElement();

            // 下面開始遍歷這個樹的結(jié)構(gòu)

            if(n)

            {

            ??????? if (n->getNodeType() == DOMNode::ELEMENT_NODE)

            ??????? {

            ?????????????? ?DOMNodeList* nodeList = n->getChildNodes();

            ?????????????? ?unsigned int nListLen = nodeList->getLength();

            ?????????????? ?for (unsigned int i=0; i<nListLen; ++i)

            ?????????????? ?{

            ????????????????????? DOMNode* nodeTemp = nodeList->item(i);

            ????????????????????? if (nodeTemp->getNodeType() == DOMNode::ELEMENT_NODE)

            ????????????????????? {

            ???????????????????????????? for (DOMNode* node1=nodeTemp->getFirstChild(); node1!=0; node1=node1->getNextSibling())

            ???????????????????????????? {

            ??????????????????????????????????? char* name = XMLString::transcode(node1->getNodeName());

            ??????????????????????????????????? string strTemp = name;

            ??????????????????????????????????? if (strTemp == "name")?? // 這個就是跟 xml 文檔中 name 節(jié)點匹配

            ??????????????????????????????????? {

            ??????? char* myname=XMLString::transcode(node1->getFirstChild()->getNodeValue());

            ?????????????????????????????????????????? cout<<myname<<endl;

            ??????????????????????????????????? }

            ???????????????????????????? }

            ????????????????????? }

            ????????????????????? continue;

            ?????????????? }

            ??????? }

            }

            8. ? 如何添加子節(jié)點。

            ??? //Add new (empty) Element to the root element
            ???? DOM_Element parentNode = …;// parent is known
            ???? DOM_Element prodElem = doc->createElement (tagName);
            ???? parentNode->appendChild (prodElem);

            9. ? 在加載 xml 文件分析前,有兩種加載方式:一種直接通過文件加載,一種是通過內(nèi)存加載

            1. ? String xmlfile = “a.xml”;

            Parser->parse(xmlfile.c_str());

            ??????? 2.MemBufInputSource ? 這個類處理內(nèi)存的數(shù)據(jù),然后利用 parser->parse(*men)//men MemBufInputSource ? 的實例指針對象。

            ?

            10. ????????????? 在加載分析報文前,可以設(shè)置 XercesDOMParser 的一些屬性。

            ??????? P arser->setValidationScheme( XercesDOMParser::Val_Auto );
            ? ??? ????Parser->setDoNamespaces( false );
            ? ? ?????Parser->setDoSchema( false );
            ? ? ?????Parser->setLoadExternalDTD( false );

            ??????? // 這個部分的代碼可以參照類庫自帶的例子。

            11. ????????????? 我們也可以設(shè)置錯誤的處理代碼。

            ??????? 這部分可以查看類庫下的 DOMPrint 例子。 DOMError ,DOMErrorHandler

            12. ????????????? 也可以設(shè)置分析過濾的屬性

            ???????? DOMNodeFilter? 這個類能起到這個效果

            13. ????????????? 要美化文檔的格式化輸出,我們可以使用

            ??????? XMLFormatter??? XMLFormatTarget? , 用的時候可以查看。

            14????? 我們也可以通過 DOMImplementationLs , DOMImplementation 前者是后者的基類。通過這個類我們可以創(chuàng)建 DOMBuilder parser )或 DOMWriter (序列,既可以寫到屏幕,也可以寫到文件)

            posted on 2007-03-15 15:54 true 閱讀(4770) 評論(4)  編輯 收藏 引用 所屬分類: 其它開源庫

            Feedback

            # re: Xerces C++ 學(xué)習(xí)筆記[轉(zhuǎn)] 2008-03-20 11:02 o
            good!  回復(fù)  更多評論
              

            # re: Xerces C++ 學(xué)習(xí)筆記[轉(zhuǎn)] 2009-05-22 14:02
            Excellent!~  回復(fù)  更多評論
              

            # re: Xerces C++ 學(xué)習(xí)筆記[轉(zhuǎn)] 2009-06-18 21:18 zhu
            LZ還有沒啊  回復(fù)  更多評論
              

            # re: Xerces C++ 學(xué)習(xí)筆記[轉(zhuǎn)] 2009-06-18 21:18 zhu
            我的QQ 61975993
            LZ加我呀  回復(fù)  更多評論
              

            精品久久久久久久中文字幕| 无码任你躁久久久久久| 无码伊人66久久大杳蕉网站谷歌| 亚洲精品无码久久久| 久久强奷乱码老熟女网站| 亚洲乱码精品久久久久..| 2021精品国产综合久久| 青青草原综合久久| 久久久一本精品99久久精品88| 久久精品国产亚洲精品2020| 国产精品欧美久久久久无广告| 久久夜色精品国产www| 无码人妻久久一区二区三区| 久久综合狠狠色综合伊人| 久久青青色综合| 97久久精品国产精品青草| 性欧美大战久久久久久久| 精产国品久久一二三产区区别| 久久亚洲国产欧洲精品一| 久久精品9988| 看久久久久久a级毛片| 久久97久久97精品免视看秋霞| 久久国产热精品波多野结衣AV| 欧美午夜精品久久久久久浪潮| 久久精品国产亚洲av麻豆色欲| 一级做a爰片久久毛片毛片| 国产成人99久久亚洲综合精品| 久久九九精品99国产精品| 欧美日韩精品久久久久| 久久久久亚洲精品中文字幕 | 伊人久久免费视频| 色诱久久久久综合网ywww| 久久精品人人做人人爽电影| 狠狠色丁香婷综合久久| 激情综合色综合久久综合| 2021最新久久久视精品爱| 亚洲欧洲中文日韩久久AV乱码| 亚洲乱码日产精品a级毛片久久 | 久久精品国产日本波多野结衣| 亚洲αv久久久噜噜噜噜噜| 综合久久国产九一剧情麻豆|