2011-06-01 7 views
9

से अच्छी तरह से गठित XML मैं इस तरह एक XmlDocument बनाने: तो फिरसहेजें PowerShell

$doc = New-Object xml 

, नोड्स के साथ इसे भरने के बाद, मैं इसे बचाने के लिए:

$doc.Save($fileName) 

समस्या यह है कि यदि ऐसा नहीं होता है दस्तावेज़ की शुरुआत में एक्सएमएल घोषणा जोड़ें, जिसके परिणामस्वरूप विकृत दस्तावेज़। दूसरे शब्दों में, यह केवल एक टुकड़ा बचाता है। मैं इसमें एक सही एक्सएमएल घोषणा कैसे जोड़ सकता हूं?

+3

FYI एक XML घोषणा की कमी नहीं है मा एक एक्सएमएल फ़ाइल विकृत है क्योंकि यह एक आवश्यक तत्व नहीं है। –

उत्तर

11

आउटपुट प्रारूपित करने के लिए आपको XmlTextWriter कक्षा का उपयोग करने की आवश्यकता है। यहां एक नमूना है, हालांकि आप आपके किसी भी विशिष्ट जरूरतों हेडर को जोड़े परे के लिए यह विकसित करने के लिए चाहते हो सकता है:,

$doc = [xml]"<html>Value</html>" 
$sb = New-Object System.Text.StringBuilder 
$sw = New-Object System.IO.StringWriter($sb) 
$writer = New-Object System.Xml.XmlTextWriter($sw) 
$writer.Formatting = [System.Xml.Formatting]::Indented 
$doc.Save($writer) 
$writer.Close() 
$sw.Dispose() 

बाद StringBuilder वस्तु पर ToString विधि को फोन करके, आप निम्न उत्पादन देख सकते हैं:

PS C:\> $sb.ToString() 
<?xml version="1.0" encoding="utf-16"?> 
<html>Value</html> 
+0

यदि एचटीएमएल टैग में एक संक्रमणकालीन सिद्धांत था तो मैं इसके साथ एक समस्या में भाग गया। एचटीएमएल को वैध एक्सएमएल दस्तावेज़ में पार्स नहीं किया जा सका। – Wade

+0

हालांकि यह दृष्टिकोण काम करता है, शक्तियों में एकीकृत XML विधियों का उपयोग करना एक समग्र बेहतर समाधान है। – Ryanman

14

या आप XmlDocument जैसे पर CreateXmlDeclaration विधि का उपयोग कर सकते हैं:

$doc = new-object xml 
$decl = $doc.CreateXmlDeclaration("1.0", $null, $null) 
$rootNode = $doc.CreateElement("root"); 
$doc.InsertBefore($decl, $doc.DocumentElement) 
$doc.AppendChild($rootNode); 
$doc.Save("C:\temp\test.xml") 
+0

आप $ doc.AppendChild के साथ $ decl भी जोड़ सकते हैं –