2015-09-17 11 views
5

Ho un file xml con spazio dei nomi predefinito specificato con e senza prefisso dello spazio dei nomi. Quando genero l'output xml mi sto prefissando tutti gli elementi xml. C'è modo di sbarazzarsi dei prefissi dal momento che sto usando lo spazio dei nomi predefinito?Forza XDocument a non utilizzare il prefisso dello spazio dei nomi se lo spazio dei nomi è anche definito come predefinito

class Program 
{ 
    static void Main(string[] args) 
    { 
     var xml = 
      "<root xmlns='default-namespace' xmlns:key='default-namespace'>" + 
      " <node1></node1>" + 
      " <node2></node2>" + 
      "</root>"; 
     var document = XDocument.Parse(xml); 
     var output = document.ToString(); 
    } 
} 

L'output:

<key:root xmlns="default-namespace" xmlns:key="default-namespace"> 
    <key:node1></key:node1> 
    <key:node2></key:node2> 
</key:root> 

ciò che mi aspettavo:

<root xmlns="default-namespace" xmlns:key="default-namespace"> 
    <node1></node1> 
    <node2></node2> 
</root> 

purtroppo non posso rimuovere la dichiarazione del namespace duplicato. Il file xml che sto usando è fornito da un'altra parte e devo apportare meno modifiche possibili.

+0

A mio avviso si tratta di un difetto della LINQ to XML modelli di oggetti che i prefissi di nomi nodo non vengono memorizzati e che in modo che il serializzatore debba scegliere un prefisso basato sugli attributi di dichiarazione dello spazio dei nomi durante la serializzazione di un albero in una stringa di XML. Sembra che l'attuale implementazione di ToString() o Save utilizzi l'ultima dichiarazione dello spazio dei nomi trovato di uno spazio dei nomi come modifica dell'ordine a '' fornisce un diverso risultato ma non è qualcosa su cui contare, ovviamente. Se i prefissi sono importanti, scegli un diverso modello di albero come XmlDocument. –

risposta

-2

È possibile utilizzare il metodo String.Replace per ottenere il formato richiesto XML ...

var xml ="<root xmlns='default-namespace' xmlns:key='default-namespace'>" + 
     " <node1></node1>" + 
     " <node2></node2>" + 
     "</root>"; 
     var document = XDocument.Parse(xml); 

     var output = document.ToString().Replace("key:", string.Empty); 
+0

Questo è considerato un hack. Cosa succede se il nodo 1 contiene il valore chiave: qualcosa Martijn