rapidxml提取子串的方法

The_Only_Name_2 2011-08-31 05:36:31
比如如下XML串

<root>
<person age="23" sex="male">ligang</person>
</root>


我用什么办法可以得到串

<person age="23" sex="male">ligang</person>


注意,不是要得到节点的name:person,也不是要得到节点value:ligang,而是要得到整个串:

<person age="23" sex="male">ligang</person>

有什么方法吗?有人说用string容器提供的find(),那当然也是一个方法,而且是很烂的方法,最好是rapidxml本身提供了这样的接口可以调用,有了解的高人指点下,谢谢了。
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_Only_Name_2 2011-09-19
  • 打赏
  • 举报
回复
谢谢楼上两位,我找到方法了,这里贴一下,方便需要的童鞋


#include <string>
#include <sstream>

#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_print.hpp"

void main()
{
char xmlMsg[2000] = “<root>”
“<person age="23" sex="male">ligang</person>”
“</root>”;
rapidxml::xml_document<> doc;
doc.parse<0>(xmlMsg);//解析

rapidxml::xml_node<> *root = doc.first_node();//获取根节点

string strMsg;
rapidxml::xml_node<> *node = root->first_node(); std::stringstream ss;//关
ss<<*node; //键
strMsg = ss.str(); //部分
cout<<"strMsg : "<<strMsg <<endl;
}


pathuang68 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 the_only_name_2 的回复:]

引用 1 楼 pathuang68 的回复:
不难滴...

你用rapidxml提供的借口函数,先得到这个person节点,然后用rapidxml的api获取这个节点的两个attributes(age为“23”和sex为“male”)和它的value("ligang")。

然后根据上面得到的内容,自己构造一个字符串“<person age="23" sex="male">ligan……
[/Quote]
呵呵。
1. 用string的find的确是个不错的办法,如果你不care内存的话。
2. 可以负责任的告诉楼主,你想要的那种API,应该是木有滴。

仅供参考。
The_Only_Name_2 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pathuang68 的回复:]
不难滴...

你用rapidxml提供的借口函数,先得到这个person节点,然后用rapidxml的api获取这个节点的两个attributes(age为“23”和sex为“male”)和它的value("ligang")。

然后根据上面得到的内容,自己构造一个字符串“<person age="23" sex="male">ligang</person>”即可。

从楼主上面的问……
[/Quote]

我最先得到的本来就是一个XML报文,我先解析了,从里面抽出节点名,属性名,属性值,然后再组装成一个XML串,不是太曲折了么?说实话,这还不如string::find()呢,有没有直接点的啊,比如
node.getXMLStr();这样的
pathuang68 2011-08-31
  • 打赏
  • 举报
回复
不难滴...

你用rapidxml提供的借口函数,先得到这个person节点,然后用rapidxml的api获取这个节点的两个attributes(age为“23”和sex为“male”)和它的value("ligang")。

然后根据上面得到的内容,自己构造一个字符串“<person age="23" sex="male">ligang</person>”即可。

从楼主上面的问题描述,个人觉得楼主对xml的一些感念有点模糊。

<person age="23" sex="male">ligang</person>就是一个节点
age和sex是这个节点的属性(attribute),ligang是这个节点的值(value)

"不是要得到节点的name:person,也不是要得到节点value:ligang"这样的说法是不够专业的。name:person不是节点,value:ligang也不是。

仅供参考。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧