Qt5 xml转Json
来源:互联网 发布:js elementHTML 编辑:程序博客网 时间:2024/06/13 09:49
由于业务需要,把xml数据转化为 json数据。
这个例子 展示了 Qt的QDom解析xml 以及 QJson的用法。
xml
<?xml version="1.0" encoding="utf-8"?><root> <mission title="有序列表中,Type属性可能的赋值是:" mid="11"> <answer result="0" aid="42">disc</answer> <answer result="0" aid="44">circle</answer> <answer result="1" aid="45">a</answer> <answer result="0" aid="43">square</answer> </mission> <mission title="以下符号中,输出一根水平线条的标签是:" mid="2"> <answer result="0" aid="8"><line/></answer> <answer result="1" aid="6"><hr/></answer> <answer result="0" aid="7"><img/></answer> <answer result="0" aid="5"><br/></answer> </mission> <mission title="HTML的基本结构是:" mid="3"> <answer result="0" aid="10"><root><head></head><body></body></root></answer> <answer result="0" aid="11"><html><title></title><body></body></html></answer> <answer result="1" aid="9"><html><head></head><body></body></html></answer> <answer result="0" aid="12"><root><title></title><body></body></root></answer> </mission> <mission title="用来给网页增加背景图片的属性是:" mid="7"> <answer result="0" aid="27">src</answer> <answer result="0" aid="26">bgcolor</answer> <answer result="0" aid="28">image</answer> <answer result="1" aid="29">background</answer> </mission> <mission title="超链接标签是:" mid="8"> <answer result="0" aid="31"><font></font></answer> <answer result="0" aid="33"><em></em></answer> <answer result="1" aid="30"><a></a></answer> <answer result="0" aid="32"><link></link></answer> </mission> <code>1</code> <mess>成功发送答题信息</mess> </root>
C++代码:
QString str=reply->readAll(); QDomDocument doc; doc.setContent(str); QDomElement elem=doc.documentElement(); QDomNodeList Missions=elem.elementsByTagName("mission"); QJsonArray JsonArray; QDomNodeList tmpNodes; for(int i=0;i<=Missions.length();i++) { tmpNodes=Missions.at(i).toElement().elementsByTagName("answer"); QJsonObject tmpAnserJson; QJsonArray tmparray; for(int k=0;k<tmparray.count();k++)tmparray.removeAt(k); tmpAnserJson.insert("title",Missions.at(i).toElement().attributeNode("title").value()); tmpAnserJson.insert("mid",Missions.at(i).toElement().attributeNode("mid").value()); for(int j=0;j<tmpNodes.length();j++) { QJsonObject tmpjsonObj; tmpjsonObj.insert("answer",tmpNodes.at(j).toElement().text()); tmpjsonObj.insert("result",tmpNodes.at(j).toElement().attributeNode("result").value()); tmpjsonObj.insert("aid",tmpNodes.at(j).toElement().attributeNode("aid").value()); tmparray.append(tmpjsonObj); } tmpAnserJson.insert("detail",tmparray); JsonArray.append(tmpAnserJson); } QJsonDocument jsondoc; jsondoc.setArray(JsonArray); QString strjson=jsondoc.toJson(); qDebug()<<strjson; qDebug()<<str;
json:
[ { "detail": [ { "aid": "45", "answer": "a", "result": "1" }, { "aid": "42", "answer": "disc", "result": "0" }, { "aid": "44", "answer": "circle", "result": "0" }, { "aid": "43", "answer": "square", "result": "0" } ], "mid": "11", "title": "有序列表中,Type属性可能的赋值是:" }, { "detail": [ { "aid": "33", "answer": "<em></em>", "result": "0" }, { "aid": "30", "answer": "<a></a>", "result": "1" }, { "aid": "31", "answer": "<font></font>", "result": "0" }, { "aid": "32", "answer": "<link></link>", "result": "0" } ], "mid": "8", "title": "超链接标签是:" }, { "detail": [ { "aid": "17", "answer": "<p></p>", "result": "0" }, { "aid": "13", "answer": "<hr/>", "result": "0" }, { "aid": "16", "answer": "<font></font>", "result": "0" }, { "aid": "14", "answer": "<h3></h3>", "result": "1" }, { "aid": "15", "answer": "<t></t>", "result": "0" } ], "mid": "4", "title": "下列哪一个属于标题标签:" }, { "detail": [ { "aid": "38", "answer": "<ol></ol>", "result": "1" }, { "aid": "40", "answer": "<dl></dl>", "result": "0" }, { "aid": "41", "answer": "<list></list>", "result": "0" }, { "aid": "39", "answer": "<ul></ul>", "result": "0" } ], "mid": "10", "title": "有序列表的标签为:" }, { "detail": [ { "aid": "4", "answer": "<huanhang/>", "result": "0" }, { "aid": "1", "answer": "<br/>", "result": "1" }, { "aid": "2", "answer": "<hr/>", "result": "0" }, { "aid": "3", "answer": "<img/>", "result": "0" } ], "mid": "1", "title": "以下符号中,强制换行标签是:" }, { "detail": [], "mid": "", "title": "" }]需要注意几点:
一。关于XML
xml获取根结点:(元素)
doc.documentElement();结点,分文本结点,属性结点..
而元素是一种特别的结点,有文本和属性。
QDomNode 结点转元素 需要
.toElement()
获取某一元素下面的元素,通过TagName(多个)
QDomNodeList Missions=elem.elementsByTagName("mission");获取元素的某个属性值:
.attributeNode("title").value()二.关于Json
Json对象是:
QJsonObject在对象上插入属性(可以插入多个,多个属性)
tmpjsonObj.insert("answer",tmpNodes.at(j).toElement().text());值可以是对象,也可以是JsonArray,也可以是字符串。
Json数组是
QJsonArray tmparray;数组 不是 键/值方式存储,直接插入即可。取出直接索引.
tmparray.append(tmpjsonObj);
作者原创,请勿转载。
阅读全文
0 0
- Qt5 xml转Json
- Qt5中JSON与XML的解析
- qt5 json使用
- qt5使用json格式
- qt5 解析Json文件
- Qt5.0解析JSON
- AS3 XML 转JSON
- json 转 xml
- java xml转json
- XML转json输出
- XML转JSON
- json转xml
- xml转json
- XML转JSON
- json转xml
- XML转JSON
- xml转json
- xml 转json 传输
- Discrete-time LTI system : the convolution sum representation
- Canny边缘检测算法原理及其VC实现详解
- 洛谷P1364 医院设置
- 从地址空间看进程和线程
- Hibernate4 和 Hibernate5 创建session的区别
- Qt5 xml转Json
- 生活小记29
- 【日常】sublime text 3配置chrome插件LiveReload
- 习题3.4
- 利用 Hexo + Github Pages 搭建免费博客
- 在oracle的子查询中使用some,any和all
- Oracle数据库中的五类单行函数及习题讲解
- Spark源码走读(二) —— Job的提交
- vue学习第4天,表单输入绑定 组件