提问人:Nicholas Saunders 提问时间:10/10/2022 最后编辑:Nicholas Saunders 更新时间:10/10/2022 访问量:101
如何使用 Powershell 读取 XML 和写入 CSV?
How to read XML and write CSV with Powershell?
问:
如何将文件转换为文件或写入文件?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",
..
即使深度为 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 /home/nicholas/xml>
这远非.CSV
答:
请尝试以下操作:
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()
我更新下面的代码
在字段两边添加了双引号,因为数据包含逗号。
合并的描述字段,以使用正则表达式删除回车符和多余空格。
使用装配系统 使用程序集 System.Collections 使用程序集 System.Xml.Linq 使用程序集 System.IO 使用程序集 System.Text.RegularExpressions
$inputFilename = “c:\temp\test.xml” $outputFilename = “c:\temp\test.csv”
$doc = [System.Xml.Linq.XDocument]::Load($inputFilename) $writer = New-Object System.IO.StreamWriter($outputFilename) $headerArray = @(“id”,“作者”,“标题”,“流派”,“价格”,“发布”,“描述”) $header = [String]::Join(“”“,”“”, $headerArray) $writer。写线(“”“” + $header + “”“”)
$books = $doc。后代(“书”)
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 $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。刷新() $writer。关闭()
Import-Clixml
不用于导入任意 XML 文档;它仅设计用于处理包含 CLIXML 数据的 XML 文档,CLIXML 数据是一种基于 XML 的序列化格式,用于表示用于跨进程通信的 .NET 类型实例,例如由 Export-Clixml
生成。CLIXML 通常在 PowerShell 远程处理(以及更一般的跨进程通信)中后台使用。
也许令人惊讶的是,没有用于导入任意 XML 文档的通用 cmdlet(但是,有一个用于从 XML 文档中查询和提取数据的 cmdlet,即 Select-Xml
)。
您必须使用类型 (System.Xml.XmlDocument
) 将 XML 数据导入 DOM,然后允许您将数据转换为不同的格式:[xml]
# 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 中,请考虑与 Export-Csv
以及用于控制输出字符编码的参数一起使用,默认为 ASCII(!)。幸运的是,在 PowerShell (Core) 中,7+ 现在是隐含的,默认字符编码是(无 BOM)UTF-8。-NoTypeInformation
-Encoding
-NoTypeInformation
输出:
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.
评论
<xml... >
<catalog>
"version=""1.0"""
"System.Xml.XmlElement"
$books
$books.ChildNodes
=IMPORTXML("https://www.w3schools.com/xml/books.xml", "//*")
$books.catalog.book | Export-Csv -Path .\books.csv -NoTypeInformation