2013-10-08 7 views
11

Sto caricando un documento XML con alcuni tag privi di testo interno.XMLDocument.Save aggiunge carrelli di ritorno in XML quando gli elementi sono vuoti

Se io popolo della InnerText con alcuni dati allora funziona come necessario (si ottiene tag di apertura, InnerText e tag di chiusura tutto su una riga) come la seguente ...

<root> 
    <element>value</element> 
</root> 

Il problema si pone con le etichette senza valori. Questi dovrebbero essere visualizzati nello stesso modo come sopra con l'eccezione di alcun valore grossolano, come il seguente ...

<root> 
    <element></element> 
</root> 

Tuttavia, quando l'InnerText ha una stringa vuota si aggiunge un ritorno avanzamento & linea che non è quello che ci si aspetta! Si finisce per assomigliare alla seguente ...

<root> 
    <element> 
    </element> 
</root> 

Questo è il mio codice corrente che produce i risultati di cui sopra ...

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(@"C:\test.xml"); 

//Save the xml and then cleanup 
xmlDoc.Save(@"C:\test.xml"); 

risposta

18

questa fissa per me ...

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(@"C:\test.xml"); 

//Save the xml and then cleanup 
XmlWriterSettings settings = new XmlWriterSettings { Indent = true }; 
XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings); 
xmlDoc.Save(writer); 
+1

Non capisco perché funzioni e XmlDocument PreserveWhiteSpace continua a fallire, ma ha risolto il mio problema. –

+0

Grazie mille. per me funziona. –

+0

Questo ci ha aiutato con un problema che stavamo causando un database che non veniva generato correttamente da un output xml modificato. Il problema erano le nuove linee generate dal metodo 'XmlDocument.Save()' sugli elementi vuoti. Grazie! –

1
+0

Grazie, sì ho trovato la mia risposta non appena ho postato questa domanda. Ho inviato il codice esatto per aiutare gli altri se si imbattono nella stessa situazione. Grazie per la risposta! –

0

probabilmente è troppo tardi, ma ho fatto riferimento alla soluzione data dalla Arvo Bowen. soluzione di Arvo è in C#, ho scritto lo stesso in PowerShell Sintassi

# $dest_file is the path to the destination file 
$xml_dest = [XML] (Get-Content $dest_file) 

# 
# Operations done on $xml_dest 
# 

$settings = new-object System.Xml.XmlWriterSettings 
$settings.CloseOutput = $true 
$settings.Indent = $true 
$writer = [System.Xml.XmlWriter]::Create($dest_file, $settings) 

$xml_dest.Save($writer) 
$writer.Close() 

E 'risolto i miei due problemi:

  • One, problema indicato in precedenza vale a dire a capo di carattere che viene aggiunto al Null/valori vuoti.
  • In secondo luogo, nessun tag di chiusura viene creato per valori null/vuoti. es: <tag1>$null</tag1> sarebbe in realtà essere scritta in file come <tag /> consultare questa discussione: Can we force XmlWriter to issue <my-tag></my-tag> rather than <my-tag/>?
Problemi correlati