• <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加我呀  回復  更多評論
              

            久久婷婷五月综合成人D啪| 91精品久久久久久无码| 久久久国产乱子伦精品作者| 久久这里有精品视频| 欧美伊香蕉久久综合类网站| 久久偷看各类wc女厕嘘嘘| 蜜臀久久99精品久久久久久| 久久亚洲欧美日本精品| 精品国产一区二区三区久久| 久久成人国产精品| 久久综合综合久久97色| segui久久国产精品| 国产成人精品久久亚洲| 久久久久久久久久久免费精品| 狠狠久久综合伊人不卡| 亚洲国产天堂久久久久久| 青青久久精品国产免费看| 久久亚洲中文字幕精品一区| 无码8090精品久久一区| 久久精品国产日本波多野结衣| 日韩av无码久久精品免费| 高清免费久久午夜精品| 无码国内精品久久综合88| 一本久久a久久精品vr综合| 久久综合狠狠综合久久综合88| 91精品国产综合久久婷婷| AA级片免费看视频久久| 久久伊人五月丁香狠狠色| 久久久一本精品99久久精品66| 精品国产一区二区三区久久| 久久久黄片| 久久午夜无码鲁丝片| 精品人妻伦一二三区久久| 狠狠色丁香久久婷婷综合_中 | 色8久久人人97超碰香蕉987| 精品久久人妻av中文字幕| 久久久人妻精品无码一区| 亚洲AV无码久久| 久久婷婷五月综合97色直播| 久久精品麻豆日日躁夜夜躁| 久久久久亚洲精品无码网址|