使用tinyxml2生成和解析xml文档
来源:互联网 发布:sql查询语句不重复 编辑:程序博客网 时间:2024/05/29 18:45
xml文档主要用于储存数据进行配置。
tinyxml2的官方文档
https://github.com/leethomason/tinyxml2
第一步是建立一个c++文件
这里使用的是qt creatot编辑器,也可以在命令行下编译。
#include <iostream>#include <tinyxml2.h>using namespace tinyxml2;using namespace std;int main(int argc, char *argv[]){ XMLDocument doc; doc.LoadFile("dream.xml"); // Structure of the XML file: // - Element "PLAY" the root Element, which is the FirstChildElement of the Document // -- Element "TITLE" child of the root PLAY Element // --- Text child of the TITLE Element // Navigate to the title, using the convenience function // const char * title = doc.FirstChildElement("PLAY"); return 0;}
手动写一个dream.xml文件
<PLAY> <TITLE>A Midsummer Night's Dream</TITLE></PLAY>
wang@wang:~/test$ g++ parsexml.cpp -o parsexml
/tmp/ccJ1gyNX.o: In function `main':
parsexml.cpp:(.text+0x2e): undefined reference to `tinyxml2::XMLDocument::XMLDocument(bool, tinyxml2::Whitespace)'
如果值有parsexml.cpp文件的话会出现如上错误,
所以正确的编译选项
wang@wang:~/test$ g++ parsexml.cpp /home/wang/github/tinyxml2/tinyxml2.cpp -o parsexml
tinyxml2.cpp是文件的安装位置。
怎么安装tinyxml2查看上面提供的官方文档。
qt中需要配置parsexml.pro文件,加上最后一行,编译成功。
parsexml.pro
TEMPLATE = appCONFIG += console c++11CONFIG -= app_bundleCONFIG -= qtSOURCES += main.cppSOURCES += ~/github/tinyxml2/tinyxml2.cpp
#include <iostream>#include <tinyxml2.h>using namespace tinyxml2;using namespace std;int main(int argc, char *argv[]){ XMLDocument doc; doc.LoadFile("dream.xml"); // Structure of the XML file: // - Element "PLAY" the root Element, which is the FirstChildElement of the Document // -- Element "TITLE" child of the root PLAY Element // --- Text child of the TITLE Element // Navigate to the title, using the convenience function const char * title = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE")->GetText(); printf("Name of play (1): %s\n", title); // Text is just another Node to TinyXML-2. The more // general way to get to the XMLText: XMLText *textNode = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE")->FirstChild()->ToText(); title = textNode->Value(); printf("Name of play (2): %s\n", title); return 0;}
运行结果:
Name of play (1): A Midsummer Night's Dream
Name of play (2): A Midsummer Night's Dream
主要操作有四个:
(The XML is an excerpt from "dream.xml").
The structure of the XML file is:
- (declaration)
- (dtd stuff)
- Element "PLAY"
- Element "TITLE"
- Text "A Midsummer Night's Dream"
- Element "TITLE"
For this example, we want to print out the title of the play. The text of the title (what we want) is child of the "TITLE" element which is a child of the "PLAY" element.
We want to skip the declaration and dtd, so the method FirstChildElement() is a good choice. The FirstChildElement() of the Document is the "PLAY" Element, the FirstChildElement() of the "PLAY" Element is the "TITLE" Element.
We can then use the convenience function GetText() to get the title of the play.
Text is just another Node in the XML DOM. And in fact you should be a little cautious with it, as text nodes can contain elements.
Consider: A Midsummer Night's <b>Dream</b>
It is more correct to actually query the Text Node if in doubt:
Noting that here we use FirstChild() since we are looking for XMLText, not an element, and ToText() is a cast from a Node to a XMLText.
There are fundamentally 2 ways of writing a key-value pair into an XML file. (Something that's always annoyed me about XML.) Either by using attributes, or by writing the key name into an element and the value into the text node wrapped by the element. Both approaches are illustrated in this example, which shows two ways to encode the value "2" into the key "v":
TinyXML-2 has accessors for both approaches.
When using an attribute, you navigate to the XMLElement with that attribute and use the QueryIntAttribute() group of methods. (Also QueryFloatAttribute(), etc.)
When using the text approach, you need to navigate down one more step to the XMLElement that contains the text. Note the extra FirstChildElement( "v" ) in the code below. The value of the text can then be safely queried with the QueryIntText() group of methods. (Also QueryFloatText(), etc.)
- 使用tinyxml2生成和解析xml文档
- 使用tinyxml2库解析xml
- C++使用TinyXml2解析Xml
- 使用dom4j生成和解析XML文档
- 使用Pull解析和生成XML文档
- Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- cocos2d-x使用tinyxml2解析&存储xml
- cocos2d-x使用tinyxml2解析&存储xml
- 在C++中使用TinyXML2解析xml
- cocos2d-x使用tinyxml2解析&存储xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- cocos2d-x使用tinyxml2解析&存储xml
- 在C++中使用TinyXML2解析xml
- chrome安装失败 错误代码0xa0430721解决办法,清理工具
- context,listener,filter,servlet加载顺序
- break的巧妙时用
- 命令
- is 32-bit instead of 64-bit动态库错误分析
- 使用tinyxml2生成和解析xml文档
- Inno Setup 注册表获取程序安装路径
- 文件结构
- 构造函数实例
- Project facet Dynamic Web Module version 3.0 is not supported.
- JMS发送消息工具类MsgQueueSender
- XML缓存工具类WebserviceXml
- dom4j处理带命名空间的XML-使用XPath
- 一个各种牛逼神器的网站