Domanda

Sto creando XML utilizzando Linq to XML e C#.Funziona tutto alla grande tranne quando devo aggiungere manualmente una riga nell'XML.Questa riga viene aggiunta solo se ho un valore da passare ad essa, altrimenti ignoro semplicemente l'intero tag.

Utilizzo XElement.Load per caricare la stringa di testo che memorizzo in una stringa ma quando la allego all'XML inserisce sempre xmlns="" alla fine del mio tag.

C'è un modo per dire a XElement.Load di utilizzare lo spazio dei nomi esistente o di ignorarlo quando si inserisce la stringa nell'XML?

Idealmente, voglio solo che la mia stringa sia inclusa nell'XML creato senza che vengano aggiunti tag aggiuntivi.

Di seguito è riportato un esempio di ciò che faccio attualmente:

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";

Quando creo l'XML carico la stringa sopra nel mio XML.È qui che xmlns="" viene aggiunto al valore XMLDetails, ma idealmente vorrei che questo venisse ignorato poiché causa problemi al destinatario quando tenta di leggere questo tag.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",

...Il mio codice XML...

XElement.Load(new StringReader(XMLDetails))

...Fine del codice XML...

Come menzionato sopra.Il mio codice funziona, restituisce correttamente XML per me.È solo che il tag MyNewTag che carico utilizzando XElement.Load viene aggiunto xmlns="" alla fine, il che mi causa un problema.

Qualche idea su come posso aggirare questo problema?Grazie per l'aiuto.

Saluti, ricco

È stato utile?

Soluzione

Come su:

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());

come un'alternativa migliore - perché non si sia includere lo spazio dei nomi quando si sta costruendo l'XML, o, meglio ancora, creare un XElement invece di generare manualmente una stringa XML che si invita a leggere. la creazione di XML manualmente è molto raramente una buona idea. A parte ogni altra cosa, si sta assumendo che ValuePassedThrough è già stato sfuggito, o non ha bisogno fuga ecc che possono essere valida -. Ma è almeno un motivo di preoccupazione

Altri suggerimenti

Come questo

XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            XMLDetails));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top