我们正在运行以下脚本:
[xml]$products = 获取内容 C:\fso\products.xml
并收到以下错误:
System.OutOfMemoryException
我们假设这是因为 XML 文件很大。解决方案可能涉及一次读取 XML 一行。 我们如何处理这个文件?例如,我们如何计算元素的数量?或者,我们如何将元素名称打印到控制台窗口?
我们目前正在查看此链接:
http://blogs.technet.com/b/stephap/archive/2009/05/27/choking-on-very-large-xml-files.aspx
XML结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Products.xsd" generated="2014-01-21T08:21:41">
<Products>
<upc>0000000000001</upc>
<description>BASICS $1.00</description>
<cost>0.6</cost>
<normal_price>1</normal_price>
<pricemethod>0</pricemethod>
<target_margin>0</target_margin>
<department>34</department>
<pack>1</pack>
<tax>3</tax>
<foodstamp>0</foodstamp>
<scale>0</scale>
<dsd>0</dsd>
<modified>2014-01-04T10:23:55</modified>
<cost_modified>2012-11-11T11:20:58</cost_modified>
<active>1</active>
<advertised>0</advertised>
<whomodified>170</whomodified>
<longdescription>TEAR ISSUE</longdescription>
<seconddescription>ROLL START</seconddescription>
<discount>1</discount>
<wicable>0</wicable>
<validage>0</validage>
<deleted>0</deleted>
<attributes>2056</attributes>
<Created>2005-02-16T09:53:00</Created>
<CreatedBy>1</CreatedBy>
<Points>0</Points>
</Products>
<Products>
<upc>0000000000357</upc>
<description>CHARMIN BATHROOM TISSUE</description>
<cost>5.81</cost>
<normal_price>7.99</normal_price>
<pricemethod>0</pricemethod>
<target_margin>0</target_margin>
<department>4</department>
<pack>1</pack>
<size>OVERLIMIT</size>
<tax>2</tax>
<foodstamp>0</foodstamp>
<scale>0</scale>
<dsd>0</dsd>
<modified>2010-06-30T23:55:00</modified>
<active>0</active>
<advertised>0</advertised>
<whomodified>30</whomodified>
<longdescription>CHARMIN BATHROOM TISSUE</longdescription>
<discount>1</discount>
<wicable>0</wicable>
<validage>0</validage>
<deleted>0</deleted>
<attributes>2048</attributes>
<Created>2005-02-16T09:53:00</Created>
<CreatedBy>1</CreatedBy>
<Points>0</Points>
</Products>
最佳答案
最好使用 XPath 来查询此类文档。 XPath 通常可以在不需要将整个文档加载到 DOM 树中的流模式下工作。
参见Select-Xml:
以下将计算 XML 文件中的所有元素:
Select-Xml -Path C:\fso\products.xml -Xpath "count(//*)"
通过这种方式,您可以获取您要查找的 XML 的小片段或对其进行计算。
关于xml - PowerShell 在读取大型 (50 MB) XML 文档时抛出 System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264411/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?
一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我
我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::
我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi
这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::
我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att
我想在Rails中使用插件系统创建一个应用程序。潜在用户应该能够上传(或更好地从存储库安装)一个插件并安装它,使我的应用程序能够做更多的事情。这应该在没有FTP/SSH/对服务器的任何低级别访问的情况下完成。关于如何在Rails3中完成它,是否有任何好的gems或教程? 最佳答案 你看过http://edgeguides.rubyonrails.org/plugins.html了吗??它似乎不是100%兼容Rails3,但它可以帮助您入门。我看过的大多数插件文章都涉及Rails2。 关于
亲测可用。Anerroroccurredwhileresolvingpackages:Projecthasinvaliddependencies: com.unity.xxx:No'git'executablewasfound.PleaseinstallGitonyour systemthenrestartUnityandUnityHub在我们使用PackageManager时,Unity允许我们使用Git上的package(点击加号,选择addpackagefromgitURL,或者是直接在Asset/Packages/manifest.json中添加包名)。但是这种操作需要我们事先装好g
我有一个包含JSON散列的大文件(>50Mb)。像这样的东西:{"obj1":{"key1":"val1","key2":"val2"},"obj2":{"key1":"val1","key2":"val2"}...}与其解析整个文件并取前十个元素,不如解析散列中的每个项目。我实际上并不关心key,即obj1。如果我将上面的转换为:{"key1":"val1","key2":"val2"}"obj2":{"key1":"val1","key2":"val2"}我可以使用Yajl流轻松实现我想要的:io=File.open(path_to_file)count=10Yajl::Parse