使用ZenXML处理XML文档
2014-02-13 17:53
351 查看
XML文档已经成为了任何软件设计中不可或缺的部分,而怎样简单高效的处理XML文档则是一个设计的关键之处。
虽然libXML、Expat等XML库能够很好的处理XML文档,不过ZenXML也有其独到之处,下面就来看看如何使用ZenXML来处理XML文档吧。
不同于别的XML库,ZenXML只有一些头文件,而没有C或者CPP的文件,在使用的时候,只需要包含xml.h就足够了。
1、如何从XML文档读取内容
2、如何从XmlDoc获得所需的数据
3、如何向XmlDoc写入数据并保存到磁盘
4、如何将XmlDoc保存为二进制XML
5、如何对自定义的枚举类型进行读写
6、如何对自定义Struct进行读写
上面的代码演示了如何使用zenXML进行XML文件的读写和自定义类型一些处理,希望能对大家有所帮助。
虽然libXML、Expat等XML库能够很好的处理XML文档,不过ZenXML也有其独到之处,下面就来看看如何使用ZenXML来处理XML文档吧。
不同于别的XML库,ZenXML只有一些头文件,而没有C或者CPP的文件,在使用的时候,只需要包含xml.h就足够了。
1、如何从XML文档读取内容
zen::XmlDoc CXMLUtils::LoadXmlFromFile( const char *sFilename, bool bReuseStrings ) { zen::XmlDoc doc; try { doc = zen::load(sFilename); } catch (const zen::XmlError& e) { gSystem->FaltalError("XML File Load Error : %s \n", sFilename, e); } return doc; }
2、如何从XmlDoc获得所需的数据
// 从XML文件读取配置 zen::XmlIn inConfig(xmlDoc); inConfig["Window"]["WindowName"](m_WindowName); inConfig["Window"]["StartPosition"](m_WindowStartPosition); inConfig["Window"]["WindowSize"](m_WindowSize); inConfig["Window"]["StereoType"](m_WindowStereoType); inConfig["Window"]["FullScreen"](m_WindowFullScreen); inConfig["Engine"]["Render"]["RenderType"](m_RenderType);
3、如何向XmlDoc写入数据并保存到磁盘
zen::XmlDoc sysConfig; zen::XmlOut out(sysConfig); out["Window"]["WindowName"]("TEngine Window"); out["Window"]["StartPosition"](glm::vec2(100, 100)); out["Window"]["WindowSize"](glm::vec2(1024, 768)); out["Window"]["StereoType"](StereoNone); out["Window"]["FullScreen"](false); out["Engine"]["Render"]["RenderType"](OpenGL4X); try { zen::save(sysConfig, "System.cfg"); //throw zen::XmlFileError } catch (const zen::XmlFileError& e) { gSystem->FaltalError("XML File Create Error : %s \n", "System.cfg", e); }
4、如何将XmlDoc保存为二进制XML
zen::XmlDoc doc; std::string stream = serialize(doc); //throw () /* you now have a binary XML stream */ saveStream(stream, "file.xml"); //throw XmlFileError
5、如何对自定义的枚举类型进行读写
enum StereoType { StereoNone, QuatBufferStereo, LeftRightStereo, UpDownStereo, RedBlueStereo };
namespace zen { // StereoType template <> inline void writeText(const StereoType& value, std::string& output) { switch (value) { case StereoNone: output = "StereoNone"; break; case QuatBufferStereo: output = "QuatBufferStereo"; break; case LeftRightStereo: output = "LeftRightStereo"; break; case UpDownStereo: output = "UpDownStereo"; break; case RedBlueStereo: output = "RedBlueStereo"; break; } } template <> inline bool readText(const std::string& input, StereoType& value) { std::string tmp = input; zen::trim(tmp); if (tmp == "StereoNone") value = StereoNone; else if (tmp == "QuatBufferStereo") value = QuatBufferStereo; else if (tmp == "LeftRightStereo") value = LeftRightStereo; else if (tmp == "UpDownStereo") value = UpDownStereo; else if (tmp == "RedBlueStereo") value = RedBlueStereo; else return false; return true; } }
6、如何对自定义Struct进行读写
// glm::vec4 template <> inline void writeStruc(const glm::vec4& value, XmlElement& output) { XmlOut out(output); out["x"](value.x); out["y"](value.y); out["z"](value.z); out["w"](value.w); } template <> inline bool readStruc(const XmlElement& input, glm::vec4& value) { XmlIn in(input); bool rv1 = in["x"](value.x); bool rv2 = in["y"](value.y); bool rv3 = in["z"](value.z); bool rv4 = in["w"](value.w); return rv1 && rv2 && rv3 && rv4; }
上面的代码演示了如何使用zenXML进行XML文件的读写和自定义类型一些处理,希望能对大家有所帮助。
相关文章推荐
- 使用sp_xml_preparedocument处理XML文档
- 使用sp_xml_preparedocument处理XML文档
- 使用sp_xml_preparedocument处理XML文档
- [Python学习]使用minidom来处理XML的示例 (一)–XML的读取
- windows下使用libxml2处理XML报文
- 【Qt笔记】使用 SAX 处理 XML
- Python使用ElementTree处理XML的美化
- 使用SimpleXML 处理XML 文件
- 在SSIS中使用XML任务处理XML数据或文档
- IOS学习笔记27—使用GDataXML解析XML文档
- tomcat对于web.xml的security-constraint使用的处理机制
- [libxml2]_[XML处理]_[使用libxml2的xpath特性修改xml文件内容]
- 使用minidom来处理XML的示例(Python 学习)(转载)
- 使用BeautifulSoup处理XML文档
- 关于使用dom4j生成xml时特殊字符处理的解决方法
- 使用VTD-XML简化XML处理-克服DOM及SAX缺点的新选择
- 【Qt笔记】使用 DOM 处理 XML
- 在VC6中使用MSXML 4.0 DOM处理XML文档
- [Python学习]使用minidom来处理XML的示例(一)–XML的读取
- XML解析之使用DOM分析操作XML文档