2009-04-15 25 views

Trả lời

14

Đây có thể không phải là tối ưu nhất, nhưng nó hoạt động. Đơn giản chỉ cần tải xml và đẩy nó trở lại vào một tập tin. tiêu đề xml bị mất mặc dù vậy, điều này phải được thêm lại.

$files = get-ChildItem "*.xml" 
foreach ($file in $files) 
{ 
    [System.Xml.XmlDocument]$doc = new-object System.Xml.XmlDocument; 
    $doc.set_PreserveWhiteSpace($true); 
    $doc.Load($file); 

    $root = $doc.get_DocumentElement(); 
    $xml = $root.get_outerXml(); 
    $xml = '<?xml version="1.0" encoding="utf-8"?>' + $xml 

    $newFile = $file.Name + ".new" 
    Set-Content -Encoding UTF8 $newFile $xml; 
} 
+0

Bạn không nên đặt mã hóa một cách rõ ràng để lưu ở đâu đó? – Joey

+0

Nếu tôi biết làm thế nào, tôi sẽ. Nó có vẻ là mặc định. –

+0

-Thông số mã hóa. – JasonMArcher

13

Vâng, tôi đoán là cách đơn giản nhất là chỉ cần không quan tâm về việc liệu các tập tin là XML hay không và chỉ đơn giản là chuyển đổi:

Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo 

này sẽ chỉ làm việc cho XML khi không có

<?xml version="1.0" encoding="UTF-16"?> 

dòng.

+4

Nếu bạn muốn làm điều đó mà không cần tạo một tệp mới, bạn có thể bao bọc nội dung trong dấu ngoặc đơn: (Get-Content File.foo) | Set-Content -Encoding UTF8 File.foo – Jaykul

+0

Làm thế nào để bạn làm điều này cho các tập tin trong một thư mục và thư mục con? – stormwild

+1

'gci -rec -fi * | % {(gc $ _ -enc unicode) | set-content -enc utf8 $ _. fullname} '. Khá đơn giản, thực sự. – Joey

8

Hãy thử giải pháp này sử dụng một XmlWriter:

$encoding="UTF-8" # most encoding should work 
$files = get-ChildItem "*.xml" 
foreach ($file in $files) 
{ 
    [xml] $xmlDoc = get-content $file 
    $xmlDoc.xml = $($xmlDoc.CreateXmlDeclaration("1.0",$encoding,"")).Value 
    $xmlDoc.save($file.FullName)  
} 

Bạn có thể muốn nhìn vào XMLDocument cho lời giải thích thêm về CreateXmlDeclaration.

+0

Cảm ơn bạn rất nhiều vì đã quan tâm đến việc cung cấp câu trả lời ngắn gọn, kỹ thuật, tốt hơn cho câu hỏi cũ như vậy! – gimpf

+0

Tôi phải hoàn thành và tôi đã tìm thấy giải pháp này ngay cả trước khi nhìn thấy câu hỏi này. Tôi cảm thấy bình thường khi cung cấp nó. Với ít nỗ lực, ai đó thậm chí có thể sử dụng nó để sao chép trong khi chuyển đổi mã hóa các tệp. Trân trọng. – LMA1980

Các vấn đề liên quan