g ++在linux下编译rapidxml 使用与过程中出现的问题解决[通俗易懂]

g ++在linux下编译rapidxml 使用与过程中出现的问题解决[通俗易懂]rapidxmlunderlinuxwithg++

大家好,又见面了,我是你们的朋友全栈君。

共四个文件需要引用

#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_iterators.hpp"

 1:修改rapidxml_iterators.hpp文件  第20 和 102 行

        // typedef typename xml_node<Ch> value_type;
        // typedef typename xml_node<Ch> &reference;
        // typedef typename xml_node<Ch> *pointer;
        // typedef std::ptrdiff_t difference_type;
        // typedef std::bidirectional_iterator_tag iterator_category;

为下面的内容

        typedef xml_node<Ch> value_type;
        typedef xml_node<Ch> &reference;
        typedef xml_node<Ch> *pointer;
        typedef typename std::ptrdiff_t difference_type;
        typedef typename std::bidirectional_iterator_tag iterator_category;

       // typedef typename xml_attribute<Ch> value_type;
        // typedef typename xml_attribute<Ch> &reference;
        // typedef typename xml_attribute<Ch> *pointer;
        // typedef std::ptrdiff_t difference_type;
        // typedef std::bidirectional_iterator_tag iterator_category;
为下面的内容
        typedef xml_node<Ch> value_type;
        typedef xml_node<Ch> &reference;
        typedef xml_node<Ch> *pointer;
        typedef typename std::ptrdiff_t difference_type;
        typedef typename std::bidirectional_iterator_tag iterator_category;

2:rapidxml_print.hpp  文件   在文件的:124行处插入如下代码

template<class OutIt, class Ch>
inline OutIt print_children(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_attributes(OutIt out, const xml_node<Ch>* node, int flags);

template<class OutIt, class Ch>
inline OutIt print_data_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_cdata_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_element_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_declaration_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_comment_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_doctype_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

template<class OutIt, class Ch>
inline OutIt print_pi_node(OutIt out, const xml_node<Ch>* node, int flags, int indent);

g ++在linux下编译rapidxml 使用与过程中出现的问题解决[通俗易懂]

 

更改完毕即可使用了

1.写文件

#include <iostream>
#include "../rapidxml/rapidxml.hpp"
#include "../rapidxml/rapidxml_utils.hpp"
#include "../rapidxml/rapidxml_print.hpp"
#include "../rapidxml/rapidxml_iterators.hpp"

 
using namespace rapidxml;
 
int main()
{    
	xml_document<> doc;  
	xml_node<>* rot = doc.allocate_node(rapidxml::node_pi,doc.allocate_string("xml version='1.0' encoding='utf-8'"));
	doc.append_node(rot);
	xml_node<>* node =   doc.allocate_node(node_element,"config","information");  
	xml_node<>* color =   doc.allocate_node(node_element,"color",NULL);  
	//建议使用如下方法,否则临时变量的指针出了作用域,容易造成xml节点问题
	//std::string s = "color";
	//char* pname = doc.allocate_string(s.c_str());
	//doc.allocate_node(node_element,pname,NULL)
	doc.append_node(node);
	node->append_node(color);
	color->append_node(doc.allocate_node(node_element,"red","0.1"));
	color->append_node(doc.allocate_node(node_element,"green","0.1"));
	color->append_node(doc.allocate_node(node_element,"blue","0.1"));
	color->append_node(doc.allocate_node(node_element,"alpha","1.0"));
 
	xml_node<>* size =   doc.allocate_node(node_element,"size",NULL); 
	size->append_node(doc.allocate_node(node_element,"x","640"));
	size->append_node(doc.allocate_node(node_element,"y","480"));
	node->append_node(size);
 
	xml_node<>* mode = doc.allocate_node(rapidxml::node_element,"mode","screen mode");
	mode->append_attribute(doc.allocate_attribute("fullscreen","false"));
	node->append_node(mode);
 
	std::string text;  
	rapidxml::print(std::back_inserter(text), doc, 0);  
 
	std::cout<<text<<std::endl; 
 
	std::ofstream out("config.xml");
	out << doc;
 
	system("PAUSE");
	return EXIT_SUCCESS;
}

2.读文件 :

#include <iostream>
#include "../rapidxml/rapidxml.hpp"
#include "../rapidxml/rapidxml_utils.hpp"
#include "../rapidxml/rapidxml_print.hpp"
#include "../rapidxml/rapidxml_iterators.hpp"
using namespace rapidxml;

int main()
{
    file<> fdoc("config.xml");
    std::cout << fdoc.data() << std::endl;
    xml_document<> doc;
    doc.parse<parse_full>(fdoc.data());

    std::cout << doc.name() << std::endl;

    //! 获取根节点
    xml_node<> *root = doc.first_node("config");
    std::cout << root->name() << std::endl;

    //! 获取根节点第一个节点
    xml_node<> *node1 = root->first_node();
    std::cout << node1->name() << std::endl;

    xml_node<> *node11 = node1->first_node();
    std::cout << node11->name() << std::endl;
    std::cout << node11->value() << std::endl;

    //! 修改之后再次保存
    xml_node<> *size = root->first_node("size");

    // rapidxml::xml_attribute<>* nameAttr = child->first_attribute("name");

    size->append_node(doc.allocate_node(node_element, "w", "0"));
    size->append_node(doc.allocate_node(node_element, "h", "0"));

    std::string text;
    rapidxml::print(std::back_inserter(text), doc, 0);

    std::cout << text << std::endl;

    std::ofstream out("config.xml");
    out << doc;

    system("PAUSE");
    return EXIT_SUCCESS;
}

运行结果 config.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<config>
    <color>
        <red>0.1</red>
        <green>0.1</green>
        <blue>0.1</blue>
        <alpha>1.0</alpha>
    </color>
    <size>
        <x>640</x>
        <y>480</y>
        <w>0</w>
        <h>0</h>     
    </size>
    <mode fullscreen=”false”>screen mode</mode>
</config>

3.读xml 格式数据

#include <iostream>
#include "../rapidxml/rapidxml.hpp"
#include "../rapidxml/rapidxml_utils.hpp"
#include "../rapidxml/rapidxml_print.hpp"
#include "../rapidxml/rapidxml_iterators.hpp"

using namespace rapidxml;

void readFile(char *strc)
{
    rapidxml::xml_document<> doc;
    doc.parse<0>(strc);
    //获取根节点 
    rapidxml::xml_node<> *root = doc.first_node("Package");
    int nSize = 0;

    std::cout << "config=" << root->name() << std::endl;

    // rapidxml::xml_node<> *child = root->first_node("LtdInfo")->first_node(); //找到 LtdInfo 节点

    // std::cout << "LtdInfo=" << child->name() << std::endl;
    // std::cout << "LtdInfo=" << child->value() << std::endl;

    for (rapidxml::xml_node<> *child = root->first_node("LtdInfo")->first_node(); child; child = child->next_sibling())
    {

        std::cout << "" << child->name() << ":=" << child->value() << std::endl;
       
    }

    for (rapidxml::xml_node<> *child = root->first_node("Data")->first_node(); child; child = child->next_sibling())
    {

        std::cout << "" << child->name() << ":=" << child->value() << std::endl;
       
    }

    strc = NULL;
}

int main()
{  
    char strbuf[] =     

        "<Package>"
        "<LtdInfo>"
        "<Code>[41574100001454]</Code>"
        "<Pwd>[111111]</Pwd>"
        "<Class>[N010]</Class>"
        "<Flag>[20220408210546445]</Flag>"
        "</LtdInfo>"
        "<Data>"
        "<Name>[Datatype,DateTime,millisecond,Data]</Name>"
        "<Value>[0,2022-04-08 21:05:46,445,21.6,20.3,18.6,17.6,16.7,16.6,15.6,14.4,14.2,14.2,12.5,10.6,8.8,9.3,8.2,6.3,7.1,4.6,4.9,3.9,0.1,11.8,1.4,-0.8,-1.7,-0.7,13.8,-1.5,-2.6,-0.8,-4.3,-2.1,-2.5,1.9]</Value>"
        "</Data>"
        "</Package>";
    readFile(strbuf);
}

g ++在linux下编译rapidxml 使用与过程中出现的问题解决[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160907.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 硬核总结!真二叉树、满二叉树、完全二叉树的性质与概念

    硬核总结!真二叉树、满二叉树、完全二叉树的性质与概念树形结构这是我们最熟悉的线性结构,线性结构的数据简单来说就是一条线,串起来一个个的节点。那树形结构是怎样的呢?很明显,顾名思义,它是一棵树的样子。将这棵树进行180度大翻转,就成了数据结构中的树形结构了可以初步看出,二叉树就是每个节点要么没有分枝,要么就是分两根枝,而多叉树的每个节点可以有任意的分枝。生活中的树形结构文件夹的管理就是我们生活中最常见的树形结构…

    2022年5月31日
    36
  • 【23】进大厂必须掌握的面试题-50个spring面试

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 让我们从Spring面试问题的第一部分开始,即“一般问题”。 一般问题–Spring面试问题 1.不同版本的Spri…

    2021年6月24日
    133
  • python中for循环语句例子_for循环语句格式

    python中for循环语句例子_for循环语句格式有时候我们在使用python进行编程的时候,想使用for语句,下面来介绍一下for语句的使用方法工具/原料pythonfor语句的使用方法和实例方法/步骤1第一步我们首先需要知道python中for语句主要用于迭代遍历字符串,列表,元组等,首先输入“foriin”abcdefg”:print(i)”遍历字符串,如下图所示:2第二步运行py文件之后,可以看到将字符串abcdefg中的元素全部遍…

    2022年8月12日
    5
  • matlab心形曲线代码_matlab心形

    matlab心形曲线代码_matlab心形(1)有网格线clearx=-2:0.01:2;y=sqrt(2*sqrt(x.^2)-x.^2);z=asin(abs(x)-1)-pi./2;plot(x,y);gridon;holdon;plot(x,z);axisequal;效果图(2)无网格线t=0:0.1:2*pi;x=16*sin(t).^3;y=13*cos(t)-5*cos(2*t)-2*co…

    2022年10月17日
    2
  • springboot打包成jar jsp文件无法访问

    springboot打包成jar jsp文件无法访问出现这种情况的原因是静态资源没有打包到 jar 如何解决 ps 本编博客不是解决 thymeleaf 模板引擎的问题第一步在 pom xml 文件的 amp lt build amp gt amp lt build amp gt 标签下添加如下 amp lt resources amp gt amp lt resou

    2025年11月10日
    3
  • 埃尔夫斯堡vs赫尔辛堡比分分析_马赛对阿贾克斯

    埃尔夫斯堡vs赫尔辛堡比分分析_马赛对阿贾克斯一、c++STL常用内容总结文章目录一、c++STL常用内容总结1.vector(数组)1.1介绍1.2方法函数1.3注意点1.3.a排序1.3.b访问2.stack(栈)2.1介绍2.2方法函数2.3注意点2.3.a.栈遍历2.3.b.模拟栈3.queue(队列)3.1介绍3.2方法函数4.deque(双端队列)4.1介绍4.2方法函数4.3注意点5.priority_queue(优先队列)5.1介绍5.2函数方法5.3设置优先级5.3.a基本数据类型的优先级5

    2025年5月25日
    5

发表回复

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

关注全栈程序员社区公众号