如何用Powershell读写XML和CSV?

1cosmwyk  于 2022-12-06  发布在  Shell
关注(0)|答案(2)|浏览(135)

如何将books.xml转换为CSV并写入文件?

PS /home/nicholas/xml> 
PS /home/nicholas/xml> $books = Import-Clixml books.xml 
PS /home/nicholas/xml> 
PS /home/nicholas/xml> $books.InnerXml                  
<?xml version="1.0"?><catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications 
      with XML.</description></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date><description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description></book><book id="bk103"><author>Corets, Eva</author><title>Maeve Ascendant</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-11-17</publish_date><description>After the collapse of a nanotechnology 
      society in England, the young survivors lay the 
      foundation for a new society.</description></book><book id="bk104"><author>Corets, Eva</author><title>Oberon's Legacy</title><genre>Fantasy</genre><price>5.95</price><publish_date>2001-03-10</publish_date><description>In post-apocalypse England, the mysterious 
      agent known only as Oberon helps to create a new life 
      for the inhabitants of London. Sequel to Maeve 
      Ascendant.</description></book><book id="bk105"><author>Corets, Eva</author><title>The Sundered Grail</title><genre>Fantasy</genre><price>5.95</price><publish_date>2001-09-10</publish_date><description>The two daughters of Maeve, half-sisters, 
      battle one another for control of England. Sequel to 
      Oberon's Legacy.</description></book><book id="bk106"><author>Randall, Cynthia</author><title>Lover Birds</title><genre>Romance</genre><price>4.95</price><publish_date>2000-09-02</publish_date><description>When Carla meets Paul at an ornithology 
      conference, tempers fly as feathers get ruffled.</description></book><book id="bk107"><author>Thurman, Paula</author><title>Splish Splash</title><genre>Romance</genre><price>4.95</price><publish_date>2000-11-02</publish_date><description>A deep sea diver finds true love twenty 
      thousand leagues beneath the sea.</description></book><book id="bk108"><author>Knorr, Stefan</author><title>Creepy Crawlies</title><genre>Horror</genre><price>4.95</price><publish_date>2000-12-06</publish_date><description>An anthology of horror stories about roaches,
      centipedes, scorpions  and other insects.</description></book><book id="bk109"><author>Kress, Peter</author><title>Paradox Lost</title><genre>Science Fiction</genre><price>6.95</price><publish_date>2000-11-02</publish_date><description>After an inadvertant trip through a Heisenberg
      Uncertainty Device, James Salway discovers the problems 
      of being quantum.</description></book><book id="bk110"><author>O'Brien, Tim</author><title>Microsoft .NET: The Programming Bible</title><genre>Computer</genre><price>36.95</price><publish_date>2000-12-09</publish_date><description>Microsoft's .NET initiative is explored in 
      detail in this deep programmer's reference.</description></book><book id="bk111"><author>O'Brien, Tim</author><title>MSXML3: A Comprehensive Guide</title><genre>Computer</genre><price>36.95</price><publish_date>2000-12-01</publish_date><description>The Microsoft MSXML3 parser is covered in 
      detail, with attention to XML DOM interfaces, XSLT processing, 
      SAX and more.</description></book><book id="bk112"><author>Galos, Mike</author><title>Visual Studio 7: A Comprehensive Guide</title><genre>Computer</genre><price>49.95</price><publish_date>2001-04-16</publish_date><description>Microsoft Visual Studio 7 is explored in depth,
      looking at how Visual Basic, Visual C++, C#, and ASP+ are 
      integrated into a comprehensive development 
      environment.</description></book></catalog>
PS /home/nicholas/xml> 
PS /home/nicholas/xml> $books | Export-Csv books.csv      
PS /home/nicholas/xml> 
PS /home/nicholas/xml> cat ./books.csv
"xml","catalog"
"version=""1.0""","System.Xml.XmlElement"
PS /home/nicholas/xml>

看起来$csv被转换了,但是如何将其写入CSV文件呢?
转换为JSON也没有好到哪里去:

PS /home/nicholas/xml> 
PS /home/nicholas/xml> 
PS /home/nicholas/xml> $books | ConvertTo-Json          
WARNING: Resulting JSON is truncated as serialization has exceeded the set depth of 2.
[
  [],
  [
    [
      "System.Xml.XmlElement",
      "System.Xml.XmlElement",
      "System.Xml.XmlElement",

..
即使X1 E0 F1 X为9或更大。
下面是$books的输出:

PS /home/nicholas/xml> 
PS /home/nicholas/xml> $books

xml           catalog
---           -------
version="1.0" catalog

PS /home/nicholas/xml> $books.ChildNodes

Version         : 1.0
Encoding        : 
Standalone      : 
Value           : version="1.0"
InnerText       : version="1.0"
Name            : xml
LocalName       : xml
NodeType        : XmlDeclaration
PreviousSibling : 
NextSibling     : catalog
ParentNode      : #document
ChildNodes      : {}
Attributes      : 
OwnerDocument   : #document
FirstChild      : 
LastChild       : 
HasChildNodes   : False
NamespaceURI    : 
Prefix          : 
IsReadOnly      : False
OuterXml        : <?xml version="1.0"?>
InnerXml        : 
SchemaInfo      : System.Xml.Schema.XmlSchemaInfo
BaseURI         : 
PreviousText    : 

book : {book, book, book, book…}

PS /首页/尼古拉斯/xml〉
其远离CSV

inb24sb2

inb24sb21#

Import-Clixml * 不 * 用于导入任意XML文档; CLIXML数据是一种基于XML的序列化格式,用于表示.NET类型的示例以进行跨进程通信,例如由Export-Clixml生成的数据。CLIXML通常在PowerShell remoting(以及更一般的跨进程通信)中 * 后台 * 使用。
也许令人惊讶的是,* 没有 * 用于导入任意XML文档的通用cmdlet(然而,有一个cmdlet用于 * 查询和提取 * XML文档中的数据,即Select-Xml)。
您必须使用[xml]类型(System.Xml.XmlDocument)将XML数据导入DOM,然后DOM允许您将数据转换为不同的格式:

# Load and parse the XML file into a DOM.
($xmlDoc = [xml]::new()).Load((Convert-Path books.xml))

# Export the book child elements of the catalog element to a CSV file.
$xmlDoc.catalog.book | Export-Csv books.csv

# Parse the CSV file into objects ([pscustomobject] instances)
# and output them to the console with friendly formatting.
Import-Csv books.csv

注:在 Windows PowerShell 中,考虑将-NoTypeInformationExport-Csv一起使用,并使用-Encoding参数来控制输出字符编码,默认为ASCII(!)。在 PowerShell(Core)7+ 中,幸运的是,-NoTypeInformation现在是 * 隐含的 *,默认字符编码为(无BOM)UTF-8。
输出量:

id           : bk101
author       : Gambardella, Matthew
title        : XML Developer's Guide
genre        : Computer
price        : 44.95
publish_date : 2000-10-01
description  : An in-depth look at creating applications 
                     with XML.

id           : bk102
author       : Ralls, Kim
title        : Midnight Rain
genre        : Fantasy
price        : 5.95
publish_date : 2000-12-16
description  : A former architect battles corporate zombies, 
                     an evil sorceress, and her own childhood to become queen 
                     of the world.

id           : bk103
author       : Corets, Eva
title        : Maeve Ascendant
genre        : Fantasy
price        : 5.95
publish_date : 2000-11-17
description  : After the collapse of a nanotechnology 
                     society in England, the young survivors lay the 
                     foundation for a new society.

id           : bk104
author       : Corets, Eva
title        : Oberon's Legacy
genre        : Fantasy
price        : 5.95
publish_date : 2001-03-10
description  : In post-apocalypse England, the mysterious 
                     agent known only as Oberon helps to create a new life 
                     for the inhabitants of London. Sequel to Maeve 
                     Ascendant.

id           : bk105
author       : Corets, Eva
title        : The Sundered Grail
genre        : Fantasy
price        : 5.95
publish_date : 2001-09-10
description  : The two daughters of Maeve, half-sisters, 
                     battle one another for control of England. Sequel to 
                     Oberon's Legacy.

id           : bk106
author       : Randall, Cynthia
title        : Lover Birds
genre        : Romance
price        : 4.95
publish_date : 2000-09-02
description  : When Carla meets Paul at an ornithology 
                     conference, tempers fly as feathers get ruffled.

id           : bk107
author       : Thurman, Paula
title        : Splish Splash
genre        : Romance
price        : 4.95
publish_date : 2000-11-02
description  : A deep sea diver finds true love twenty 
                     thousand leagues beneath the sea.

id           : bk108
author       : Knorr, Stefan
title        : Creepy Crawlies
genre        : Horror
price        : 4.95
publish_date : 2000-12-06
description  : An anthology of horror stories about roaches,
                     centipedes, scorpions  and other insects.

id           : bk109
author       : Kress, Peter
title        : Paradox Lost
genre        : Science Fiction
price        : 6.95
publish_date : 2000-11-02
description  : After an inadvertant trip through a Heisenberg
                     Uncertainty Device, James Salway discovers the problems 
                     of being quantum.

id           : bk110
author       : O'Brien, Tim
title        : Microsoft .NET: The Programming Bible
genre        : Computer
price        : 36.95
publish_date : 2000-12-09
description  : Microsoft's .NET initiative is explored in 
                     detail in this deep programmer's reference.

id           : bk111
author       : O'Brien, Tim
title        : MSXML3: A Comprehensive Guide
genre        : Computer
price        : 36.95
publish_date : 2000-12-01
description  : The Microsoft MSXML3 parser is covered in 
                     detail, with attention to XML DOM interfaces, XSLT processing, 
                     SAX and more.

id           : bk112
author       : Galos, Mike
title        : Visual Studio 7: A Comprehensive Guide
genre        : Computer
price        : 49.95
publish_date : 2001-04-16
description  : Microsoft Visual Studio 7 is explored in depth,
                     looking at how Visual Basic, Visual C++, C#, and ASP+ are 
                     integrated into a comprehensive development 
                     environment.
6vl6ewon

6vl6ewon2#

请尝试以下操作:

using assembly System
using assembly System.Collections
using assembly System.Xml.Linq
using assembly System.IO

$inputFilename = "c:\temp\test.xml"
$outputFilename = "c:\temp\test.csv"

$doc = [System.Xml.Linq.XDocument]::Load($inputFilename)
$writer = New-Object System.IO.StreamWriter($outputFilename)
$header = "id,author,title,genre,price,publish,description"
$writer.Writeline($header)

$books = $doc.Descendants("book")

foreach($book in $books)
{
 
   $id =  $book.Attribute("id").Value
   $author = $book.Element("author").Value
   $title = $book.Element("title").Value
   $genre = $book.Element("genre").Value
   $price = $book.Element("price").Value
   $date = $book.Element("publish_date").Value
   $description = $book.Element("description").Value
   $lineArray = @($id,$author,$title,$genre,$price,$date,$description)
   Write-Host $lineArray
   $line = [String]::Join(",", $lineArray)
   Write-Host $line
   $writer.Writeline($line)
}
$writer.Flush()
$writer.Close()

我更新了以下代码
1.因为数据包含逗号,所以在字段两边添加了双引号。
1.使用Regex合并描述字段以移除归位字符和额外空格。
使用程序集的系统使用程序集的System.使用程序集的集合System.Xml.Linq使用程序集的System.IO使用程序集的System.Text.RegularExpressions
文件名=“c:\temp\test.xml”文件名=“c:\temp\test. csv”文件名=“c:\temp\test.xml”文件名=“c:\temp\test.csv”
系统文件名为. IO. StreamWriter的文件名为.IO.StreamWriter的文件名为.IO.StreamWriter的文件名。
$books = $doc.后代(“书”)
foreach($本书中的$本书){

$id =  $book.Attribute("id").Value
$author = $book.Element("author").Value
$title = $book.Element("title").Value
$genre = $book.Element("genre").Value
$price = $book.Element("price").Value
$date = $book.Element("publish_date").Value
$description = $book.Element("description").Value
$description = [System.Text.RegularExpressions.Regex]::Replace($description, "\s+", " ");
$lineArray = @($id,$author,$title,$genre,$price,$date,$description)
#Write-Host $lineArray
$line = """" + [String]::Join(""",""", $lineArray) + """" 
#Write-Host $line
$writer.Writeline($line)

} $writer.Flush()$writer.Close()函数的函数调用

相关问题