• <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)絡服務器軟件開發(fā)/中間件開發(fā),關注ACE/ICE/boost

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

            Xerces C++ 學習筆記

            Xerces C++ 學習筆記

            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. ????????????? 在加載分析報文前,可以設置 XercesDOMParser 的一些屬性。

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

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

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

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

            12. ????????????? 也可以設置分析過濾的屬性

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

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

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

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

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

            Feedback

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

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

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

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

            精品久久久中文字幕人妻| 久久精品一区二区三区AV| 国产∨亚洲V天堂无码久久久| 国产精品久久久久久一区二区三区 | 国产成人精品三上悠亚久久| 国产精品一久久香蕉产线看| 国产69精品久久久久99| 囯产精品久久久久久久久蜜桃 | 成人免费网站久久久| 国产精品欧美久久久久天天影视| 午夜精品久久久久久| 国产精品久久久天天影视香蕉| 久久精品国产亚洲Aⅴ香蕉| 久久99中文字幕久久| 午夜精品久久影院蜜桃| 久久婷婷久久一区二区三区| …久久精品99久久香蕉国产| 欧美精品一区二区久久| 久久影视国产亚洲| 久久99精品国产麻豆宅宅| 精品熟女少妇AV免费久久| 久久久久99精品成人片三人毛片 | 久久er国产精品免费观看2| 精品久久久久成人码免费动漫| 欧美久久久久久精选9999| 久久99国产综合精品女同| 亚洲国产精品无码久久98| 无码国内精品久久人妻| 模特私拍国产精品久久| 亚洲AV无码久久| 久久受www免费人成_看片中文| 久久久WWW成人| 久久精品国产一区二区三区不卡 | 久久久久国产一级毛片高清版| 久久精品毛片免费观看| 久久久久国产一级毛片高清版| 久久亚洲精品成人av无码网站| 久久精品国产免费| 久久99国产精品久久99果冻传媒| 7777久久久国产精品消防器材| 亚洲国产一成人久久精品|