• <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>

            網絡服務器軟件開發/中間件開發,關注ACE/ICE/boost

            C++博客 首頁 新隨筆 聯系 聚合 管理
              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( 參數 ); 這個參數可以直接是文件名,也可以是內存的數據,具體的查看 API

            4. ? 數據格式轉換

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

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

            5. ? 分析報文后,如何得到文檔的樹型結構

            DOMDocument *xmlDoc = parser->getDocument();

            6. ? 得到樹型結構后,如何得到第一個根節點

            DOMElement *root = xmlDoc->getDocumentElement();

            7. ? 如何遍歷文檔的結構

            遍歷一個樹型的文檔結構有三種方法。

            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 節點的內容給打印出來。

            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 .使用子節點直接遍歷樹型結構

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

            // 下面開始遍歷這個樹的結構

            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 節點匹配

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

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

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

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

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

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

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

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

            ??????? }

            }

            8. ? 如何添加子節點。

            ??? //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 文件分析前,有兩種加載方式:一種直接通過文件加載,一種是通過內存加載

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

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

            ??????? 2.MemBufInputSource ? 這個類處理內存的數據,然后利用 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 前者是后者的基類。通過這個類我們可以創建 DOMBuilder parser )或 DOMWriter (序列,既可以寫到屏幕,也可以寫到文件)

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

            Feedback

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

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

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

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

            久久久久亚洲精品天堂| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲国产成人久久笫一页| 欧美午夜精品久久久久久浪潮| 亚洲国产精品狼友中文久久久| 伊人久久大香线蕉av不变影院 | 99久久婷婷国产一区二区| 国产综合免费精品久久久| 伊人 久久 精品| 热久久国产精品| 欧洲人妻丰满av无码久久不卡| 色综合久久中文色婷婷| 亚洲伊人久久综合中文成人网| 久久国产精品久久精品国产| 午夜精品久久久久久影视777| 国产精品久久毛片完整版| 久久青青色综合| 亚洲国产精品久久久久网站| 色综合久久久久综合体桃花网| 开心久久婷婷综合中文字幕| 少妇高潮惨叫久久久久久| 久久无码国产| 久久996热精品xxxx| 69久久精品无码一区二区| 人妻无码久久一区二区三区免费| 亚洲七七久久精品中文国产| 久久午夜电影网| 中文字幕日本人妻久久久免费| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 天天躁日日躁狠狠久久| 伊人久久无码精品中文字幕| 久久综合综合久久97色| 无码超乳爆乳中文字幕久久 | 久久天天日天天操综合伊人av| 一本久久久久久久| 久久久久亚洲AV无码麻豆| 久久WWW免费人成一看片| 久久人人爽人人澡人人高潮AV| 少妇被又大又粗又爽毛片久久黑人| 久久影院午夜理论片无码| 久久国产午夜精品一区二区三区|