如何在标签之间获取内容
<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) 我正在使用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部分是什么?
我正在尝试使用 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)
代码本身没有错误,但是在编译和运行后我得到了异常。
我有一个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中释放的黄色.如果尝试分配比绿色地址空间更多的缓冲区,应用程序将崩溃(内存不足).这可以在下面的图像中看到.

根据地址空间监视器页面"自由地址空间以绿色显示,保留地址以黄色显示,已使用(已提交)内存区域以红色显示"因此,根据地址空间监视器,为什么TinyXML释放的内存保持"保留"状态.什么可能导致这种情况发生,我该如何阻止它?
编辑:
"你在分配大缓冲区吗?如果是这样,那么黄色空间中可能存在内存碎片,并且无法分配大的连续缓冲区"
但是很好的问题表明TinyXML存在内存泄漏,我的工具都没有显示出来.
UPDATE
我做了循环,无休止地分配整数,最终似乎使用了所有的黄色空间.但是,更大的分配不使用它.这向我表明,在通过tinyXML解析xml文件期间,堆中出现了一些小漏洞,这些漏洞以一种方式对堆进行分段,使得只有小到足以容纳漏洞的对象才能在黄色空间中分配.所以我在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指针,从而导致异常.我该怎么处理?
谢谢.
我正在使用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时不会发生任何错误,因为有可能该线程已在后台被正在运行的线程修改,并且没有程序崩溃。
我有一个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无法阅读?即使是一个独立的人&也会被解雇?