本篇文章给大家谈谈大型XML的高效解析器,以及大型xml的高效解析器是什么的知识点,同时本文还将给你拓展AEXMLReadXMLiOSXML解析器、c#–大型XML文件,XmlDocument不可行但
本篇文章给大家谈谈大型XML的高效解析器,以及大型xml的高效解析器是什么的知识点,同时本文还将给你拓展AEXML Read XML iOS XML 解析器、c# – 大型XML文件,XmlDocument不可行但需要能够搜索、EOutOfMemory在Delphi中使用TXMLDocument解析大型XML、perl – 使用XML :: TWIG进行大型xml文件解析失败等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 大型XML的高效解析器(大型xml的高效解析器是什么)
- AEXML Read XML iOS XML 解析器
- c# – 大型XML文件,XmlDocument不可行但需要能够搜索
- EOutOfMemory在Delphi中使用TXMLDocument解析大型XML
- perl – 使用XML :: TWIG进行大型xml文件解析失败
大型XML的高效解析器(大型xml的高效解析器是什么)
我有非常大的XML文件要处理。我想将它们转换为具有颜色,边框,图像,表格和字体的可读PDF。我的机器上没有很多资源,因此,我需要我的应用程序对内存和处理器的寻址非常理想。
我进行了不起眼的研究,以使自己对所使用的技术有所了解,但是我无法确定什么是满足我的要求的最佳编程语言和API。我认为DOM不是一个选择,因为它会占用大量内存,但是带SAX解析器的Java是否可以满足我的要求?
有人还建议使用Python进行XML解析。这样好吗
非常感谢您的建议。
答案1
小编典典SAX是非常好的解析器,但是已经过时了。
最近,Oracle启动了新的Parser来有效地解析名为 Stax* 的xml文件。 *
- http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html *
附加的链接还将显示所有解析器的比较以及内存利用率及其功能。
谢谢,帕万
AEXML Read XML iOS XML 解析器
AEXML Read XML 介绍
AEXML 是简单,轻量级的 iOS XML 解析器,使用 Swift 编写。
AEXML 包括三个对象: AEXMLElement (base class), AEXMLDocument (inherited from
prevIoUs) 和 AEXMLParser (simple wrapper around NSXMLParser)。
Read XML
<?xml version="1.0" encoding="utf-8"?> <example> <info> <name platform="iOS" language="Swift">AEXML</name> <url type="github">https://github.com/tadija/AEXML</url> </info> <features> <feature>Read XML</feature> <feature>Write XML</feature> <feature>Easy to use</feature> </features> <installation>Just drag AEXML.swift into your project and start using it.</installation> </example>
AEXML Read XML 官网
https://github.com/tadija/AEXML
c# – 大型XML文件,XmlDocument不可行但需要能够搜索
我正在努力使用一个合理的逻辑循环来从XML文件中剥离出太大的节点,以便与支持.NET类的XPath一起使用.
我试图用代码执行相同但使用XmTextReader替换我拥有的单行代码(使用XPath查询字符串调用SelectNodes).
我必须通过以前使用的XPath查询(仅供参考)说明几个级别:
ConfigurationRelease/Profiles/Profile[Name='MyProfileName']/Screens/Screen[Id='MyScreenId']/Settings/Setting[Name='MySettingName']
我觉得这很烦人但很简单.但是,我似乎无法让循环正确.
我需要获取一个节点,检查其下的节点以查看该值是否与目标字符串匹配,然后再向下走(如果有)或跳过该分支(如果不匹配).
事实上,我认为我的问题是,如果我没有把它分开,我不知道如何忽略一个分支.我不能允许它走不相关的分支,因为元素名称不是唯一的(如XPath查询所示).
我以为我可以保留一些布尔,例如当我点击Profile节点时,bool expectingProfileName被设置为true.但是,如果它不是我想要的特定配置文件节点,我就无法离开那个分支.
所以…希望这对某人有意义……我一直在盯着这个问题几个小时,可能只是遗漏了一些明显的东西……
我想发布一部分文件,但无法弄清楚结构的粗略程度:
Configrelease > Profiles > Profile > Name > Screens > Screen > Settings > Setting > Name
我将知道ProfileName,ScreenName和SettingName,我需要设置节点.
我试图避免在一次点击中读取整个文件,例如在应用程序启动时,因为其中一半的东西将永远不会被使用.我也无法控制生成xml文件的内容,因此无法更改它来生成多个较小的文件.
任何提示将不胜感激.
UPDATE
我重新打开了这个.一张海报建议XPathDocument应该是完美的. Unfortunatley,我没有提到这是一个移动应用程序,并且不支持XPathDocument.
大多数标准的文件并不大,这就是系统最初被编码为使用XmlDocument的原因.它目前是4MB,显然大到足以在移动应用程序加载到XmlDocument时崩溃.它可能就像它现在出现的那样,因为文件会变得更大.无论如何,我现在正在尝试DataSet建议,但仍然对其他想法持开放态度.
更新2
我有点怀疑,因为有不少人说他们不会指望这么大的文件会让系统崩溃.进一步的实验表明,这是间歇性的崩溃.昨天它每次都崩溃了,但今天早上我重置设备后,我无法重现它.我现在正试图找出一套可靠的生殖步骤.并且还决定了解决问题的最佳方法,我相信它仍然存在.我不能放弃它,因为如果应用程序无法访问此文件,它是无用的,我不认为可以告诉我的用户,当我的应用程序运行时,他们无法在他们的设备上运行任何其他内容… ….
解决方法:
看看XPathDocument.
XPathDocument比XmlDocument更轻量级,并且针对只读XPath查询进行了优化.
EOutOfMemory在Delphi中使用TXMLDocument解析大型XML
我的问题是如何显式释放分配给IXMLNode接口的内存.我不愿意使用不同的XML对象,我想我几乎已经尝试过各种方法来控制节点接口的范围.
var childnode: IXMLNode; for i:=0 to rootnode.ChildNodes.Count-1 do begin childnode:=rootnode.ChildNodes[i]; ... childnode:=nil; end;
解决方法
var sax: SAXXMLReader60; stm: IStream; begin //Get a stream around our large file stm := TStreamAdapter.Create(TFileStream.Create('USGovBudgetLineItems2008.xml',fmOpenRead )); sax := CoSAXXMLReader60.Create; sax.contentHandler := TVBSAXContentHandler.Create; sax.parse(stm); end;
我们用SAXContentHandler对象监听事件.
对于所有Idispatch事件,您可以返回E_NOTIMPL(msxml甚至不会调用它们).
其余的你可以插入你想要的任何代码:
TVBSAXContentHandler = class(TInterfacedobject,IVBSAXContentHandler) protected { Idispatch } function GetTypeInfoCount(out Count: Integer): HResult; stdcall; function GetTypeInfo(Index,LocaleID: Integer; out TypeInfo): HResult; stdcall; function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount,LocaleID: Integer; dispIDs: Pointer): HResult; stdcall; function Invoke(dispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult,ExcepInfo,ArgErr: Pointer): HResult; stdcall; public { IVBSAXContentHandler } procedure Set_documentLocator(const Param1: IVBSAXLocator); safecall; procedure startDocument; safecall; procedure endDocument; safecall; procedure startPrefixMapping(var strPrefix: WideString; var strURI: WideString); safecall; procedure endPrefixMapping(var strPrefix: WideString); safecall; procedure startElement(var strNamespaceURI: WideString; var strLocalName: WideString; var strQName: WideString; const oAttributes: IVBSAXAttributes); safecall; procedure endElement(var strNamespaceURI: WideString; var strLocalName: WideString; var strQName: WideString); safecall; procedure characters(var strChars: WideString); safecall; procedure ignorableWhitespace(var strChars: WideString); safecall; procedure processingInstruction(var strTarget: WideString; var strData: WideString); safecall; procedure skippedEntity(var strName: WideString); safecall; // property documentLocator: IVBSAXLocator write Set_documentLocator; end;
Note: Any code is released into the public domain. No attribution required.
perl – 使用XML :: TWIG进行大型xml文件解析失败
perl.exe - Application Error: The instruction at "0x28086920" referenced memory at "0x00000004". The memory Could not be "written"...
我读到XML :: Twig解析大型xml文件没有任何问题,但在我的情况下,它失败并出现上述错误.
我的.pl文件有一个forloop代码,可以旋转100,000次,如下所示:
foreach my $d1(@detailData) { if ($d1->first_child('a')->getElementsByTagName('b')) { $id= $d1->first_child('a')->first_child('x')->field('b'); } .... ..... ...... }
在forloop里面我有大约20个如果循环如上.它是否导致内存问题?
任何人都可以建议我如何克服这些记忆问题?
解决方法
对于XML :: Twig来处理大文件,您需要告诉它在哪个级别处理文件的各个部分(通常通过定义处理子树的处理程序,然后丢弃它),请参阅模块的文档.
今天关于大型XML的高效解析器和大型xml的高效解析器是什么的讲解已经结束,谢谢您的阅读,如果想了解更多关于AEXML Read XML iOS XML 解析器、c# – 大型XML文件,XmlDocument不可行但需要能够搜索、EOutOfMemory在Delphi中使用TXMLDocument解析大型XML、perl – 使用XML :: TWIG进行大型xml文件解析失败的相关知识,请在本站搜索。
本文标签: