C++使用tinyxml来操作DOM对象(以svg格式为例,其他格式都类似操作)

原创 2015年07月06日 21:10:11

1.首先去下载tinyxml库,在这里下载http://sourceforge.net/projects/tinyxml/   。我使用tinyxml作为例子,不用tinyxml2。下载完毕后将两个头文件tinystr.h和tinyxml.h放到工程的头文件下,并包含进工程。然后将四个.c文件tinystr.c ,tinyxml.c,tinyxmlerror.c,tinyxmlparser.c 放到工程的源文件下,并包含入工程。入下图中把六个文件都包含进来即可。


现在就可以使用这个库来进行解析了。使用方法很简单。

#include "stdafx.h"
#include <iostream>
#include "tinyxml.h"

将这个tinyxml.h头文件包含进来即可。

2.一些基本操作

我要解析的svg格式的内容如下:


我想要获取的是path节点下fill的值,即颜色的值,如#4c4747这样的值。另外解析<g>节点的数量来判断图是否为单色,以及获取<svg>节点下图片的高height和宽width的信息;最后获取M中的所有节点坐标并计算其围成的面积等。下面通过使用tinyxml的一些对象来获取这些内容。下面仅以一段程序来说明功能:

bool ReadXmlFile(string filepath,SvgInfo &svginfo)
{
try
{
svginfo.name=filepath;
//载入svg文件
TiXmlDocument *myDocument =new TiXmlDocument(filepath.c_str());
myDocument->LoadFile();
//获取根节点svg
TiXmlElement *RootElement=myDocument->RootElement();
//cout<<RootElement->Value()<<endl;
//获取文件的大小
TiXmlAttribute *Attr_width=RootElement->FirstAttribute();
//cout<<"Width is "<<Attr_width->Value()<<endl;
TiXmlAttribute *Attr_height=Attr_width->Next();
//cout<<"Height is "<<Attr_height->Value()<<endl;
//处理高和宽成数字
const char *cpwidth=Attr_width->Value();
const char *cpheight=Attr_height->Value();
char *pwidth=const_cast<char *>(cpwidth);
char *pheight=const_cast<char *>(cpheight);
int widthlen=strlen(pwidth)-2;
int heightlen=strlen(pheight)-2;
char *ptempw=new char[widthlen];
char *ptemph=new char[heightlen];
strncpy_s(ptempw,strlen(pwidth),pwidth,widthlen);
strncpy_s(ptemph,strlen(pheight),pheight,heightlen);
float fwidth=atof(ptempw);
float fheight=atof(ptemph);

                  ····················

               //指向节点<g>
TiXmlElement *pelement=RootElement->FirstChildElement();
//cout<<pelement->Value()<<endl;
//指向根节点<path>
pelement=pelement->FirstChildElement();
//cout<<pelement->Value()<<endl;
//指向path的第一个属性fill
TiXmlAttribute *Attr=pelement->FirstAttribute();
//cout<<pelement->FirstAttribute()<<endl;
//cout<<Attr->Value()<<endl;
const char* cpcolor=Attr->Value();
char *pcolor=const_cast<char *>(cpcolor);
pcolor++;
string currentcolor=pcolor;
//指向path的第二个属性opacity
TiXmlAttribute *Attr2=Attr->Next();
//cout<<Attr2->Value()<<endl;
//指向path的第三个属性d,即路径的点
TiXmlAttribute *Nodespos=Attr2->Next();
const char *nodes=Nodespos->Value();

             ··························

            ···························

}

说明:参数中filepath是要处理文件的路径名,例如 D:/test/abc.svg;第二个参数是自己定义的一个结构来存储一些信息的,这里不用管。直接去看如何对其进行操作。

按照载入svg图片注释下的方式进行载入要处理的内容。定义一个TinyXmlDocument;可以视为保存当前文件的一个对象吧。然后就是对其节点的一些操作了。定义一个节点TinyXmlElement,通过获取TinyXmlDocument节点RootElement()来获取第一个节点,即<svg>节点,以后的操作就可以按照节点顺序,节点名称等进行操作了,属性用TinyXmlAttribute来获取其值。通过上面的代码可以很容易学习几个基本操作的使用。另外根据这些方法就可以自己定义一些根据名称获取某个节点值得函数了。TinyXml还不算很完善的库,但是能够提供基本的操作需求了。希望可以帮助大家。谢谢。


使用DOM创建和写入xml文件

上一篇文章介绍了使用DOM解析xml文件的方式,这篇文章将介绍如何使用DOM创建和写入xml文件。 与xml的解析操作一样,在使用DOM创建和写入xml文件的时候,也需要获取一个DocumentBu...
  • a23qws
  • a23qws
  • 2015年02月21日 13:34
  • 635

三种高效解析xml方式

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...
  • tianhe718
  • tianhe718
  • 2016年11月04日 14:46
  • 1133

tinyxml 解析XML字符串,可加载远程XML

tinyxml 轻量级XML解析器,跨平台,很不错的解析器! 1:先获取远程的XML,请求远程HTTP   CString m_data; CString m_result; m_ht...
  • jmxiaocai
  • jmxiaocai
  • 2011年12月27日 12:09
  • 6577

TinyXml创建XMl的两种方法,以及属性添加

TinyXml创建XMl的两种方法,以及属性添加  (2010-08-23 13:18:45) 转载▼ 标签:  杂谈 分类: Tinyxml ...
  • wangyin159
  • wangyin159
  • 2015年08月18日 19:32
  • 1449

Java&Xml教程(四)使用DOM方式生成XML文件

在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件。 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为”Emplo...
  • Rongbo_J
  • Rongbo_J
  • 2015年12月10日 21:22
  • 1949

spring加载--从xml配置文件到内存

spring最初的形态是存在于xml配置文件中的,使用的时候bean实例又是存在于内存中的,今儿聊聊spring对于xml文件的加载,也就是spring怎么将bean从xml搬到内存中的。1.spri...
  • qq_22912803
  • qq_22912803
  • 2016年09月17日 08:26
  • 1179

用TinyXML读写XML

       TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器, 用来读写配置文件是最好的,可从http://www.grinninglizard.com/tinyxml/index....
  • riag
  • riag
  • 2007年01月07日 10:30
  • 4378

使用TinyXML读写xml文件

1、TinyXML    引用网上的原话:TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧 玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大...
  • lgstudyvc
  • lgstudyvc
  • 2017年09月05日 23:21
  • 173

DOM解析XML浅析

xml DOM解析笔记
  • guchuanhang
  • guchuanhang
  • 2016年07月09日 12:03
  • 2311

Java解析XML文件方法之一(DOM)

DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对...
  • zp357252539
  • zp357252539
  • 2015年08月29日 08:45
  • 1308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++使用tinyxml来操作DOM对象(以svg格式为例,其他格式都类似操作)
举报原因:
原因补充:

(最多只允许输入30个字)