2008-12-02 7 views
8

Vorrei creare un XmlDeclaration personalizzato mentre si utilizza le classi XmlDocument/XMLDeclaration in C# .NET 2 o 3.Come aggiungere una XmlDeclaration personalizzata con XmlDocument/XmlDeclaration?

Questa è la mia uscita desiderato (si tratta di un'uscita previsto da un app 3rd party):

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<?MyCustomNameHere attribute1="val1" attribute2="val2" ?> 
[ ...more xml... ] 

Utilizzando le classi XmlDocument/XMLDeclaration, sembra che posso solo creare un unico XmlDeclaration con una serie definita di parametri:

XmlDocument doc = new XmlDocument(); 
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "ISO-8859-1", null); 
doc.AppendChild(declaration); 

c'è una classe diversa da quella XmlDocument/XmlDeclaration dovrei stai guardando per creare la XmlDeclaration personalizzata? O c'è un modo con le classi XmlDocument/XmlDeclaration stesso?

risposta

19

Quello che si desidera creare non è una dichiarazione XML, ma una "istruzione di elaborazione". Si dovrebbe usare la classe XmlProcessingInstruction, non la classe XmlDeclaration, ad es .:

XmlDocument doc = new XmlDocument(); 
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "ISO-8859-1", null); 
doc.AppendChild(declaration); 
XmlProcessingInstruction pi = doc.CreateProcessingInstruction("MyCustomNameHere", "attribute1=\"val1\" attribute2=\"val2\""); 
doc.AppendChild(pi); 
+0

@Bradley - Grazie! –

5

Si consiglia di aggiungere un XmlProcessingInstruction creato utilizzando il metodo dicreateProcessingInstruction del XmlDocument.

Esempio:

XmlDocument document  = new XmlDocument(); 
XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "ISO-8859-1", "no"); 

string data = String.Format(null, "attribute1=\"{0}\" attribute2=\"{1}\"", "val1", "val2"); 
XmlProcessingInstruction pi = document.CreateProcessingInstruction("MyCustomNameHere", data); 

document.AppendChild(declaration); 
document.AppendChild(pi); 
+0

@Oppositional - Grazie ancora :) Bradely e l'avete entrambi inchiodato. –