tinyint(1)_vue3 tinymce[通俗易懂]

tinyint(1)_vue3 tinymce[通俗易懂]先说几句重点:1,tinyxml生成或解析XML非常好用2,tinyxml利用DOM(文档对象模型)操作XML,根节点与各个子节点相当于形成一棵树3,只要了解tinyxml的用法,可以只new对象而不用delete。4,tinyxml包含6个文件tinystr.cpp,tinyst

大家好,欢迎来到IT知识分享网。

先说几句重点:

1,tinyxml 生成或解析XML非常好用

2,tinyxml 利用DOM(文档对象模型)操作XML,根节点与各个子节点相当于形成一棵树

3,只要了解tinyxml的用法,可以只new对象而不用delete。

4,tinyxml包含6个文件  tinystr.cpp , tinystr.h , tinyxml.cpp , tinyxmlerror.cpp , tinyxml.h , tinyxmlparser.cpp

5,来个官网说明的class  inheritance,官网地址:http://www.grinninglizard.com/tinyxmldocs/index.html

This inheritance list is sorted roughly, but not completely, alphabetically:

  • TiXmlBase
    • TiXmlAttribute
    • TiXmlNode
      • TiXmlComment
      • TiXmlDeclaration
      • TiXmlDocument
      • TiXmlElement
      • TiXmlText
      • TiXmlUnknown
  • TiXmlHandle
  • TiXmlVisitor
    • TiXmlPrinter

直接上程序,只要看完代码,就会处理最简单的XML文档了

#include <stdio.h>
#include "tinyxml.h"

int CreateXml()
{
    //创建一个XML结构
    TiXmlDocument*  pDoc = new TiXmlDocument();
    //创建一个根节点并连接到XML
    TiXmlElement* pRoot = new TiXmlElement("item");
    pDoc->LinkEndChild(pRoot);
    //创建一个name子节点并连接根节点下
    TiXmlElement* nameElement = new TiXmlElement("name");
    pRoot->LinkEndChild(nameElement);
    nameElement->SetAttribute("ID","1");
    TiXmlText* nameContent = new TiXmlText("opop");
    nameElement->LinkEndChild(nameContent);

    TiXmlElement* addrElement = new TiXmlElement("addr");
    pRoot->LinkEndChild(addrElement);
    TiXmlText* addrContent = new TiXmlText("guangzhou");
    addrElement->LinkEndChild(addrContent);

    TiXmlElement* telElement = new TiXmlElement("tel");
    pRoot->LinkEndChild(telElement);
    TiXmlText* telContent = new TiXmlText("1341532545");
    telElement->LinkEndChild(telContent);

    TiXmlElement* emailElement = new TiXmlElement("email");
    pRoot->LinkEndChild(emailElement);
    TiXmlText* emailContent = new TiXmlText("opop@qq.com");
    emailElement->LinkEndChild(emailContent);
    //保存到文件
    pDoc->SaveFile("test.xml");
    delete pDoc; //应该是必要的
    return 0;

}

int ReadXml()
{
    //创建一个XML结构并载入文件内容
    TiXmlDocument* pDoc = new TiXmlDocument();
    pDoc->LoadFile("test.xml");
    pDoc->Print();
    //获取根节点
    TiXmlElement* pRoot = pDoc->RootElement();
    printf("%s\n",pRoot->Value());
    //获取根节点下的子节点并打印其内容
    TiXmlElement* pChild = pRoot->FirstChildElement("name");
    printf("%s\n",pChild->FirstChild()->ToText()->Value());

    pChild = pRoot->FirstChildElement("addr");
    printf("%s\n",pChild->FirstChild()->ToText()->Value());

    pChild = pRoot->FirstChildElement("tel");
    printf("%s\n",pChild->FirstChild()->ToText()->Value());

    pChild = pRoot->FirstChildElement("email");
    printf("%s\n",pChild->FirstChild()->ToText()->Value());

    delete pDoc;//应该是必要的
} 

int main() { CreateXml(); ReadXml(); return 0; }

结果如下:

tinyint(1)_vue3 tinymce[通俗易懂]

最后再说一个重点:关于delete的问题

先看下面一段官方代码:只有new,没有delete

void write_simple_doc2( )
{
    // same as write_simple_doc1 but add each node
    // as early as possible into the tree.

    TiXmlDocument doc;
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc.LinkEndChild( decl );
    
    TiXmlElement * element = new TiXmlElement( "Hello" );
    doc.LinkEndChild( element );
    
    TiXmlText * text = new TiXmlText( "World" );
    element->LinkEndChild( text );
    
    doc.SaveFile( "madeByHand2.xml" );
}

Both of these produce the XML:

<?xml version="1.0" ?>
<Hello>World</Hello>

对比完就发现了,只要代码中TiXmlDocument 对象不要在堆中new,直接在栈中生成,那么,就不需要任何delete操作,而且必须不能delete,否则就出问题了。

原因很简单,只要TiXmlDocument 对象这个基本结构被销毁了,所有的节点会被自动销毁,源代码实现了该功能

所以,使用时只要保证TiXmlDocument  类型的对象正确被释放就可以了

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30030.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信