我们正在运行以下脚本:
[xml]$products = Get-Content 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>
答案 0 :(得分:4)
使用XPath查询此类文档可能更好。 XPath通常可以在流模式下工作,不需要将整个文档加载到DOM树中。
请参阅Select-Xml
:
以下内容将计算XML文件中的所有元素:
Select-Xml -Path C:\fso\products.xml -Xpath "count(//*)"
通过这种方式,您可以获取您所使用的XML的小片段或对其进行计算。
请参阅:http://technet.microsoft.com/en-us/library/hh849968.aspx
答案 1 :(得分:1)
对于大小合适的文件,一次一行的速度会非常慢。
您可以使用Get-Content -Readcount一次处理大量的行(-ReadCount 1000将为您提供每行1000行的数组)。