码迷,mamicode.com
首页 > 其他好文 > 详细

plist解析, 简易实现.

时间:2014-12-12 18:34:31      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   sp   on   文件   div   

源码

 1 class Xml {
 2 public:
 3     typedef std::pair<std::wstring, std::wstring> NodeT;
 4     static std::vector<NodeT> parse(const std::wstring &xml)
 5     {
 6         std::vector<NodeT> result;
 7 
 8         int stackCount = 0;
 9         std::wstring tagName;
10         std::wstring::const_iterator
11             curIter = std::begin(xml),
12             begIter = std::end(xml), endIter = std::end(xml), 
13             cbegIter = std::end(xml), cendIter = std::end(xml);
14 
15         std::wsmatch smatch;
16         while (std::regex_search(curIter, std::end(xml), smatch, std::wregex(LR"(</\w+>|<\w+>)")))
17         {
18             if (stackCount == 0)
19             {
20                 begIter = smatch[0].first;
21                 cbegIter = smatch[0].second;
22                 tagName = std::regex_replace(smatch[0].str(), std::wregex(LR"(<(\w+)>)"), LR"($1)");
23             }
24 
25             curIter = smatch[0].second;
26             if (smatch[0].str().substr(1, tagName.size()) == tagName)
27                 ++stackCount;
28             else if (smatch[0].str().substr(2, tagName.size()) == tagName)
29                 --stackCount;
30 
31             //    匹配完成.
32             if (stackCount == 0)
33             {
34                 endIter = smatch[0].second;
35                 cendIter = smatch[0].first;
36 
37                 result.push_back(std::make_pair(tagName, std::wstring(cbegIter, cendIter)));
38             }
39         }
40         return result;
41     };
42 };

效果图

bubuko.com,布布扣

由于项目需要输入, 输出plist文件.

C++标准又没有xml库. 索性就自己写了个简易版.

功能相当有限, 仅支持解析个个标签内容.

不过, 对我来说已经足够了.

代码也不算长, 凑合用用.

 

substr可以优化掉...

plist解析, 简易实现.

标签:style   blog   http   ar   color   sp   on   文件   div   

原文地址:http://www.cnblogs.com/mmc1206x/p/4160209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!