Qt Dom方式写xml(二)

struct PUBLIC_DATA_SEND
{
    bool ifrealtimedata;
    bool ifdatasend;
    bool confirmflag;
    int sendtimes;
    int sendtime;
    QList<QString> waitconfirmterminal;
    QList<QString> DateTimeList;
    char capturetime[20];
}SEND;

int package_public_data(QDomDocument *doc, PUBLIC_DATA_SEND *ppublicdata, int client_num, int datatype, QDomElement *root, QDomElement *data)
{
    QDomElement meters = doc->createElement("meters");
    meters.setAttribute("total", "0");

    QDomText textNode;

    for ( int i = 0; i < 10; i++)
    {
        QDomElement meter =  doc->createElement("meter");
        meter.setAttribute("id", "445");

        for ( int j = 0; j < 5; j++ )
        {
            QDomElement var = doc->createElement("var");

            var.setAttribute("e", "");
            var.setAttribute("e", "1");
            textNode = doc->createTextNode("123.45864");
            var.appendChild(textNode);
            meter.appendChild(var);
        }

        meters.appendChild(meter);
    }

    meters.setAttribute("total", "10");
    data->appendChild(meters);

    return 0;
}

int publicdata_xm(int flag, PUBLIC_DATA_SEND *ppublicdata, char *buf, int client_num, char *name)
{
    QDomDocument *doc = new QDomDocument();
    QDomProcessingInstruction instruction;
    QDomText textNode;
    instruction = doc->createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");

    QDomElement root = doc->createElement("root");
    QDomElement common = doc->createElement("common");
    QDomElement building_id = doc->createElement("building_id");
    QDomElement gateway_id = doc->createElement("gateway_id");
    QDomElement type = doc->createElement("type");
    QDomElement data = doc->createElement("data");
    QDomElement time = doc->createElement("time");

    doc->appendChild(root);
    root.appendChild(common);
    common.appendChild(building_id);
    common.appendChild(gateway_id);
    common.appendChild(type);
    root.appendChild(data);
    data.appendChild(time);

    textNode = doc->createTextNode("125479601");
    building_id.appendChild(textNode);
    textNode = doc->createTextNode("99");
    gateway_id.appendChild(textNode);

    textNode = doc->createTextNode("energy_data");
    type.appendChild(textNode);

    QString datetime = "2017-03-13 15:50";
    textNode = doc->createTextNode(datetime);
    time.appendChild(textNode);

    if ( flag == 1 )
    {
        data.setAttribute("operation", "report");
    }
    else if ( flag == 2 )
    {
        data.setAttribute("operation", "continuous");
    }
    else if ( flag == 3 )
    {
        data.setAttribute("operation", "history");
    }

    package_public_data(doc, ppublicdata, client_num, flag, &root, &data);

    printf("publicdata xml:\n%s\n",QString::fromLocal8Bit(doc->toByteArray()).toUtf8().data());

    int len = doc->toString().replace(QRegExp(">\\s+<"),"><").toLatin1().length();

    strcpy(buf, doc->toString().replace(QRegExp(">\\s+<"),"><").toLatin1());

    delete doc;

    return len;
}

int main(int argc, char *argv[])
{
    char buf[4096];

    int len = 0;
    len = publicdata_xm(1, &SEND, buf, 1, "dom");

    printf("dom xml len = %d: \n%s\n", len, buf);

    return 0;
}

DOM格式的xml,使用内存大,建议使用在xml内容小的情况下,dom格式的xml为树状结构,可以随意删除修改xml

输出xml内容为

<root>
 <common>
  <building_id>125479601</building_id>
  <gateway_id>99</gateway_id>
  <type>energy_data</type>
 </common>
 <data operation="report">
  <time>2017-03-13 15:50</time>
  <meters total="10">
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
   <meter id="445">
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
    <var e="1">123.45864</var>
   </meter>
  </meters>
 </data>
</root>

<root><common><building_id>125479601</building_id><gateway_id>99</gateway_id><type>energy_data</type></common><data operation="report"><time>2017-03-13 15:50</time><meters total="10"><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter><meter id="445"><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var><var e="1">123.45864</var></meter></meters></data></root>
时间: 03-11

Qt Dom方式写xml(二)的相关文章

XML引入,DOM 方式解析XML 原理,SAX 方式解析XML

XML 简介 Xml(eXtensible Markup Language) 即可扩展标记语言.提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML 可以方便地实现数据交换.系统配置.内容管理等常见功能. 元素VS 节点 节点包括元素节点.属性节点.文本节点:元素一定是节点,但是节点不一定是元素: <?xml version="1.0" encoding="UTF-8"?> <emp> <empName empNo=&quo

android dom方式创建xml

http://blog.csdn.net/nxh_love/article/details/7085174 在android dom 解析xml方式文章中,简单介绍了dom解析xml的应用.今天在原文章的基础上,说一下android中dom创建xml的应用. 首先:创建的文件会放在/data/data/cn.com.xxx(当前包名)/files下面. 创建生成的xml文件如下所示: [html] view plaincopy <?xml version="1.0" encodi

通过Dom方式解析xml文件

此项目通过简单的天气情况显示来实现xml文件的解析 1. 搭建环境 1)创建如下图的包.类及文件 2)布局文件的大概样式如下图所示,用到四个TextView控件和一个RadioGroup控件 3)china.xml文件的内容如下 <?xml version="1.0" encoding="UTF-8"?> <china dn="day"> <city cityname="南京" pyName=&q

Java——DOM方式生成XML (转)

http://blog.csdn.net/u012325167/article/details/50943202 使用DOM方式生成XML文件有如下几步: 首先是创建DOM树(即规定XML文件中的内容): 创建DocumentBuilderFactory对象 通过DocumentBuilderFactory对象创建DocumentBuilder对象 通过DocumentBuilder对象的newDocument()方法创建一个Document对象,该对象代表一个XML文件 通过Document对

应用DOM方式解析XML

package domTest; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMa

Java DOM方式解析XML

1 //创建一个DocumentBuilderFactory工厂实例 2 DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance(); 3 //通过工厂实例对象创建一个DocumentBuilder实例 4 DocumentBuilder DB=DBF.newDocumentBuilder(); 5 //解析URL指定的XML文件,并保存到D变量 6 Document D=DB.parse("URL路径"); 7 //

dom方式解析xml文件的步骤

006_03Java解析XML之DOM方式与SAX方式

XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX:Simple API for XML.这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它. XML解析开发包 JAXP:是SUN公司推出的解析标准实现. Dom4J:是开源组织推出的解析开发包. JDom:是开源组织推出的解析开发包. JAXP: JAXP:(Java API for XML Proc

IOS开发使用NSXMLParser、GDataXML两种方式解析XML数据

概括:XML数据解析方式有 *IOS原生的NSXMLParser,只支持SAX方式解析,使用简单 *C语言的libxml2,同时支持DOM和SAX方式解析 *google的GDataXML,只支持DOM方式解析,基于libxml2,使用时需要将编译环境配置为非ARC,并添加libxml2.dylib动态库 GDataXMLDocument 1 使用GDataXML的DOM方式解析XML,需要导入#import "GDataXMLNode.h" /** *  DOM方式解析XML数据 *