您發佈的代碼應該會引發一堆錯誤,因爲Get-Content
(不帶參數-Raw
)會生成一個字符串數組,其中每個字符串本身都是無效的XML。喂入Select-Xml
不起作用。此外,您使用[xml]
型加速器和Write-Host
是錯誤的。
憑經驗:
如果你想使用Select-Xml
讓它通過自身讀取文件(通過其-Path
參數):
$xpath = '//Car'
$xmlfile = 'C:\Test\TranslationUtility\cars.xml'
Select-Xml -Xpath $xpath -Path $xmlfile
如果你想使用Get-Content
和[xml]
型加速器使用SelectNodes()
方法:
$xpath = '//Car'
$xmlfile = 'C:\Test\TranslationUtility\cars.xml'
[xml]$xml = Get-Content $xmlfile
$xml.SelectNodes($xpath)
但是,由於您想要操作XAML文件,單靠這一點不會讓您達到預期的結果。請不要忽略您的問題中的重要信息。我只知道,因爲當你刪除它時,我正要回應你之前的問題。
XAML文件總是使用命名空間,所以你必須使用一個命名空間管理照顧,像這樣:
$xpath = '//ns:Car'
$xmlfile = 'C:\Test\TranslationUtility\cars.xml'
$ns = @{'ns' = 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'}
Select-Xml -Xpath $xpath -Path $xmlfile -Namespace $ns
或像這樣:
$xpath = '//ns:Car'
$xmlfile = 'C:\Test\TranslationUtility\cars.xml'
[xml]$xml = Get-Content $xmlfile
$nsm = New-Object Xml.XmlNamespaceManager($xml.NameTable) $nsm.AddNamespace("ns", $xml.DocumentElement.NamespaceURI)
$xml.SelectNodes($xpath, $nsm)
由於要修改XML數據我可能會採用後一種方法。這允許您添加一個屬性是這樣的:
$i = 1
$xml.SelectNodes($xpath, $nsm) | ForEach-Object {
[void]$_.SetAttribute('Text', "Car$i")
$i++
}
通過Save()
方法將修改後的XML:
$xml.Save('C:\path\to\output.xml')
太謝謝你了。是的,我收到了像你提到的錯誤。以上工作很好。 –