热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样从内存块中创建XML?

我用XML记录了一些敏感信息,因此打包到了一个较大的文件块中,并记录下了XML文件块部分的具体位置和大小.想在读取时候,先把包含XML的大文件块读到内存,然后寻找到XML开始的地方,创建XML.这样可
我用XML记录了一些敏感信息,因此打包到了一个较大的文件块中,并记录下了XML文件块部分的具体位置和大小.想在读取时候,先把包含XML的大文件块读到内存,然后寻找到XML开始的地方,创建XML.这样可行吗?
我用的是 tinyXML,不知道是否支持.
有支持这样用法的XML库吗?

9 个解决方案

#1


tinyXML完全可以.

#2


能具体说一下吗?用哪个API
谢谢

#3


load

#4


http://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/29602http://topic.csdn.net/t/20040413/16/2960207.html07.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.htmlhttp://topic.csdn.net/t/20040413/16/2960207.html

#5


MSXML2::IXMLDOMDocumentPtr pXmlDom;
MSXML2::IXMLDOMElementPtr xmlRoot;
CComBSTR rootname;
MSXML2::IXMLDOMNodeListPtr pNodeList; 
MSXML2::IXMLDOMNodePtr pNode; 
CoInitialize(NULL);
// TODO: Add extra validation here

HRESULT hr=CoCreateInstance(__uuidof(MSXML2::DOMDocument40),NULL,CLSCTX_INPROC_SERVER,
__uuidof(MSXML2::IXMLDOMDocument),(void**)&pXmlDom);
if(!SUCCEEDED(hr))
{
::MessageBox(NULL, "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!", "error", MB_OK); 
return -1;
}
pXmlDom->put_async(VARIANT_FALSE); 
pXmlDom->put_validateOnParse(VARIANT_FALSE);
pXmlDom->put_resolveExternals(VARIANT_FALSE);
pXmlDom->load((_variant_t)str);

#6


LS用的是MSXML吧

tinyxml的LoadFile是从文件中读XML
LoadFile也是先把文件读到内存中 然后分析
如果tinyxml没有提供直接从内存中读XML的方法
但它提供给你了源码
LoadFile中读文件到内存以后的代码不就是你需要的了

#7


LoadFile把文件读到内存中 然后分析,你自己的XML格式,自己知道,根据格式生成XML.用的都是tinyxml类中的函数,其实那些函数不是很多(重载了一堆),知道了那些函数的含义就好办了.

tinyxml类提供了一系列的方法,具体还要你自己去灵活运用.

#8


文件的载入功能实现
数据结构中是两个record数组的嵌套,我们采用for循环来实现。这里给出核心代码,如下:
procedure loadTemplate(filename: string);
// 读取模版文件的代码
var
      xmlRootNode ,xmlRootNode2, xmlNode1, xmlNode2, xmlTmpNode:   IXMLNode;
      intIndex1 , intIndex2 : integer;
begin
  myXMLDocument:=TXMLDocument.Create(nil);
  myXMLDocument.LoadFromFile(filename);//加载模版文件
  myXMLDocument.Active:=true;
  try
    //获取xml格式文件的根节点
    xmlRootNode := myXMLDocument.DocumentElement;
    //实现xml的遍历
    for intIndex1 :=0 to 9 do
//实现第一层遍历,将第一层数据恢复到内存
    begin
    //用xmlNode1保存xml格式文件第一层的当前节点
    xmlNode1 := xmlRootNode.ChildNodes.Get(intIndex1);
    xmlTmpNode := xmlNode1.ChildNodes.Get(0);
    logTemplate[intIndex1].ifUsed := StrToBool(xmlTmpNode.Text);
    xmlTmpNode := xmlNode1.ChildNodes.Get(1);
    logTemplate[intIndex1].left := StrToInt(xmlTmpNode.Text);
    xmlTmpNode := xmlNode1.ChildNodes.Get(2);
    logTemplate[intIndex1].width :=StrToInt(xmlTmpNode.Text);
    xmlTmpNode := xmlNode1.ChildNodes.Get(3);
    logTemplate[intIndex1].isLinear :=StrToBool(xmlTmpNode.Text);
    //获取xml格式文件第二层数据的父节点
    xmlRootNode2 := xmlNode1.ChildNodes.Get(4);
      //实现第二层遍历,将第二层数据恢复到内存
      for intIndex2 := 0 to 3 do
      begin
      //用xmlNode2保存xml格式文件的第二层的当前节点
      xmlNode2 := xmlRootNode2.ChildNodes.Get(intIndex2);
      xmlTmpNode := xmlNode2.ChildNodes.Get(0);       
logTemplate[intIndex1].arrCurveAtt[intIndex2].ifUsed :=
StrToBool(xmlTmpNode.Text);
      xmlTmpNode := xmlNode2.ChildNodes.Get(1);
      logTemplate[intIndex1].arrCurveAtt[intIndex2].CurveCNName := xmlTmpNode.Text;
      xmlTmpNode := xmlNode2.ChildNodes.Get(2);
      logTemplate[intIndex1].arrCurveAtt[intIndex2].CurveENName := xmlTmpNode.Text;
      xmlTmpNode := xmlNode2.ChildNodes.Get(3);
      logTemplate[intIndex1].arrCurveAtt[intIndex2].CurveUnit := xmlTmpNode.Text;
      xmlTmpNode := xmlNode2.ChildNodes.Get(4);
      logTemplate[intIndex1].arrCurveAtt[intIndex2].max :=  StrToFloat(xmlTmpNode.Text);
      xmlTmpNode := xmlNode2.ChildNodes.Get(5);
      logTemplate[intIndex1].arrCurveAtt[intIndex2].min := StrToFloat(xmlTmpNode.Text);
      xmlTmpNode := xmlNode2.ChildNodes.Get(6);      
logTemplate[intIndex1].arrCurveAtt[intIndex2].linecolor :=
StringToColor(xmlTmpNode.Text);
      xmlTmpNode := xmlNode2.ChildNodes.Get(7);      
logTemplate[intIndex1].arrCurveAtt[intIndex2].lineStyle :=
TPenStyle(StrToInt(xmlTmpNode.Text));
      xmlTmpNode := xmlNode2.ChildNodes.Get(8);      
logTemplate[intIndex1].arrCurveAtt[intIndex2].lineThickness := StrToInt(xmlTmpNode.Text);
      end;
    end;
  finally
  //释放myXMLDocument
  myXMLDocument:=nil;
  end;
end;

#9


谢谢,已经找到,tinyXml 可以的,直接用 TiXmlDocument::Parse(...),就可以了,

推荐阅读
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
author-avatar
书友30905431
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有