标签: tinyxml

使用TinyXML获取标签之间的内容

如何在标签之间获取内容

<name>  </name> and <mode> </mode>
Run Code Online (Sandbox Code Playgroud)
<news>
    <name>Enter</name>
    <actions>
      <mode>me</mode>
    </actions>
   </news>
Run Code Online (Sandbox Code Playgroud)

c++ xml tinyxml

2
推荐指数
1
解决办法
5101
查看次数

C++调用具有相同签名但范围不同的方法

我正在使用TinyXML2开展一个项目.我正在尝试调用方法XMLAttribute*FindAttribute(const char*name)

该方法由实现定义为:

public : 
const XMLAttribute* FindAttribute( const char* name ) const;

private :
XMLAttribute* FindAttribute( const char* name );
Run Code Online (Sandbox Code Playgroud)

关于方法如何在公共和私有范围内具有相同的签名,我有点困惑.我只能猜测它没有,虽然我并不真正理解公共定义末尾的const部分.但是,我需要调用public方法,但g ++ sais" tinyxml2 :: XMLElement :: FindAttribute(const char*)是私有的 "

如何调用公共方法,方法原型末尾的const部分是什么?

c++ tinyxml

2
推荐指数
1
解决办法
463
查看次数

Tinyxml 打印属性

我正在尝试使用 TinyXml 从属性值中获取 std::string。我唯一能得到的是 const char * val,我找不到任何方法将 const char * 转换为 std::string。

所以有两个可能的答案: 1. 如何使用 TinyXml 获取属性字符串?2.如何将const char * val转换为字符串val。

这是我现在的代码:

TiXmlElement* data;
data->Attribute("some_name"); // return const char * which seems like unconvertible.
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,我试过这个:

char * not_const= const_cast<char *> (data->Attribute("some_name"));
Run Code Online (Sandbox Code Playgroud)

代码本身没有错误,但是在编译和运行后我得到了异常。

c++ string variables constants tinyxml

1
推荐指数
1
解决办法
4452
查看次数

为什么删除内存不可用?C++

我有一个200 MB的 XML文件,我正在使用TinyXML加载.我的问题是,当TinyXML对象被销毁时,它使用的内存将不会被重用.我使用过我在其他项目中使用的内存泄漏检测器,并且已经手动逐步执行代码并且无法找到任何内存泄漏,因此我不怀疑泄漏的内存是问题所在.

此代码将重现该问题:

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

int main()
{
    char* filename = "../LargeFile.xml";

    {
        TiXmlDocument targetDoc( filename );
        targetDoc.LoadFile();
    }

    char* buf = new char[ 524288000 ];
    delete [] buf;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用地址空间监视器我可以看到,在LoadFile()有一大块红色后,然后targetDoc被破坏后它全部变黄.然后,当分配最终的char buf时,它显示为红色,但是在绿色空间的顶部,而不是从TinyXML中释放的黄色.如果尝试分配比绿色地址空间更多的缓冲区,应用程序将崩溃(内存不足).这可以在下面的图像中看到.

加载后 卸载后 Char缓冲区分配

根据地址空间监视器页面"自由地址空间以绿色显示,保留地址以黄色显示,已使用(已提交)内存区域以红色显示"因此,根据地址空间监视器,为什么TinyXML释放的内存保持"保留"状态.什么可能导致这种情况发生,我该如何阻止它?

编辑:

"你在分配大缓冲区吗?如果是这样,那么黄色空间中可能存在内存碎片,并且无法分配大的连续缓冲区"

但是很好的问题表明TinyXML存在内存泄漏,我的工具都没有显示出来.

UPDATE

我做了循环,无休止地分配整数,最终似乎使用了所有的黄色空间.但是,更大的分配不使用它.这向我表明,在通过tinyXML解析xml文件期间,堆中出现了一些小漏洞,这些漏洞以一种方式对堆进行分段,使得只有小到足以容纳漏洞的对象才能在黄色空间中分配.所以我在TinyXML中搜索越来越长的漏洞,但仍未找到任何漏洞.一切似乎都得到了正确的释放,这让我回到了最初的困惑状态.

我无法解释这个问题.

Char缓冲区分配 Char Buffer Allocation2 Char Buffer Allocation3

c++ memory-management tinyxml

1
推荐指数
1
解决办法
636
查看次数

如何处理GetText()返回的tinyxml空指针

TiXmlElement *pElem;    
std::string StatusResponse;
pElem = hResponse.FirstChild("StatusResponse").Element();

if (pElem)
    StatusResponse = pElem->GetText();
Run Code Online (Sandbox Code Playgroud)

如果pElem有效但元素不包含文本,则pElem->GetText()返回NULL指针,从而导致异常.我该怎么处理?

谢谢.

c++ xml tinyxml null-pointer

1
推荐指数
1
解决办法
2489
查看次数

通过TinyXML深度复制XML

我正在使用tinyxml。

如何复制或创建现有XMLDocument的副本?

http://www.grinninglizard.com/tinyxmldocs/classTiXmlDocument.html#a4e8c1498a76dcde7191c683e1220882

我浏览了该链接,该链接说使用克隆来复制节点。但这是受保护的,我不想去从此类之类派生一个类。

我也不想将现有的XMLDocument保存到文件中,然后使另一个XMLDocument对象读取该文件以获取其副本。

我也无法使用memcpy执行深层复制,因为我不知道整个XML的大小。

我也不想让一个接一个地使用两个对象,例如:

XMLDocumentObj1 = add_some_data

XMLDocumentObj2 = add_the_same_data, and so on
Run Code Online (Sandbox Code Playgroud)

我想要第二个副本的主要原因是,第一个副本可能会被代码的不同部分修改,而同一副本正在多个地方“读取”。我需要确保读取XMLDocument时不会发生任何错误,因为有可能该线程已在后台被正在运行的线程修改,并且没有程序崩溃。

c++ xml tinyxml

1
推荐指数
1
解决办法
2020
查看次数

tinyXML lib无法正确读取'&'

我有一个XML文件,其中包含以下几行:

<rule pat="&&&&&&&&&&&&&&&(?<B>B) ?(?<AND>&) ?(?<E>E)">
Run Code Online (Sandbox Code Playgroud)

我在C++中使用TinyXML lib来解析这个XML文件,但是当我尝试获得这些行的'pat'属性时,TinyXML就会忽略任何出现的字符&.也就是说,TinyXML读取的结果变成了:

(?<B>B) ?(?<AND>) ?(?<E>E)
Run Code Online (Sandbox Code Playgroud)

全都&失踪了!

这个char是我的正则表达式模式的一部分,所以这将导致我的程序中的进一步错误.

有谁知道为什么这个角色&如此特别而且TinyXML无法阅读?即使是一个独立的人&也会被解雇?

c++ xml tinyxml

0
推荐指数
1
解决办法
519
查看次数