簡體   English   中英

Powershell:將XML轉成字符串

[英]Powershell: Convert XML to String

我正在尋找一種將 XML 對象轉換為字符串的方法。

Powershell中有沒有類似$xml.toString()的方式?

您可能正在尋找OuterXml

$xml.OuterXml應該給你你想要的。

您如何創建 XML 對象?

通常,如果您想要來自對象的 XML 字符串,您可以使用:

$object | ConvertTo-Xml -As String

試試這個:

[string[]]$text = $doc.OuterXml #or use Get-Content to read an XML File
$data = New-Object System.Collections.ArrayList
[void] $data.Add($text -join "`n")
$tmpDoc = New-Object System.Xml.XmlDataDocument
$tmpDoc.LoadXml($data -join "`n")
$sw = New-Object System.IO.StringWriter
$writer = New-Object System.Xml.XmlTextWriter($sw)
$writer.Formatting = [System.Xml.Formatting]::Indented
$tmpDoc.WriteContentTo($writer)
$sw.ToString()

我使用此腳本將生成的 XML 寫入 Windows 窗體中的 TextBox。

PowerShell 7+以來,有一種使用XElement漂亮打印 XML 的非常簡單的方法:

$xmlNode = [xml] '<foo x="42" y="21"><bar>baz</bar></foo>'
[System.Xml.Linq.XElement]::Parse( $xmlNode.OuterXml ).ToString()

Output:

<foo x="42" y="21">
  <bar>baz</bar>
</foo>

正如C# 答案的原始發布者所寫,就 memory 使用和執行時間而言,這不是最有效的方法。 此外,您無法對格式進行太多控制,例如,我沒有找到在新行上打印屬性的方法。 如果這些東西對你很重要,那么StringWriter解決方案會更合適。

一個更簡單的版本:

[string]$outputString = $XmlObject.childNode.childNode.theElementValueIWant.ToString()

Xml 路徑是來自$XmlObject任何源 XML 樹結構。

所以如果你的$XmlObject是:

<xmlRoot>
  <firstLevel>
    <secondLevel>
      <iWantThisValue>THE STRING I SEEK</iWantThisValue>
    </secondLevel>
  </firstLevel>
</xmlRoot>

你會使用:

[string]$outputString = $XmlObject.firstLevel.secondLevel.iWantThisValue.ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM