wie man hinzufügen (oder ignorieren) XML-Namensraum bei der Verwendung von XElement.Load

StackOverflow https://stackoverflow.com/questions/1453564

  •  12-09-2019
  •  | 
  •  

Frage

Ich bin Erstellen von XML mithilfe von Linq to XML und C #. Das alles funktioniert gut, außer wenn ich muß manuell in einer Reihe in der XML hinzuzufügen. Diese Zeile wird nur hinzugefügt, wenn ich einen Wert durchlaufen zu ihm habe, sonst ich einfach ignoriere den gesamten Tag.

Ich verwende XElement.Load in der Textzeichenfolge zu laden, die ich in einem String speichern, aber wenn ich es mit dem XML anhang es setzt immer in xmlns = „“ am Ende meines Tages.

Gibt es eine Möglichkeit, ich XElement.Load sagen kann den vorhandenen Namensraum zu verwenden oder es zu ignorieren, wenn auf die XML in der Zeichenfolge setzen?

Im Idealfall möchte ich nur meine Zeichenfolge an den XML aufgenommen werden, ohne dass zusätzliche Tags erstellt werden hinzugefügt werden.

Im Folgenden finden Sie ein Beispiel, was ich momentan tun:

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

Wenn ich die XML aufbauen Ich lade die oben String in meine XML. Es ist hier, wo xmlns = „“ ist mit dem XMLDetails Wert hinzugefügt wird, sondern im Idealfall möchte ich dies ignoriert, da es Probleme mit dem Empfänger verursacht, wenn sie versuchen, diesen Tag zu lesen.

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",

... Mein XML-Code ...

XElement.Load(new StringReader(XMLDetails))

... Ende des XML-Code ...

Wie bereits oben erwähnt. Mein Code funktioniert, ist es erfolgreich XML für mich ausgibt. Es ist nur der MyNewTag Tag Ich laden Sie sich mit dem XElement.Load Xmlns bekommt = „“ bis zum Ende des es gegeben, das verursacht mir ein Problem.

Alle Ideen, wie kann ich dieses Problem umgehen? Vielen Dank für Ihre Hilfe.

Viele Grüße, Rich

War es hilfreich?

Lösung

Wie wäre:

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

Als bessere Alternative - warum Sie nicht entweder den Namespace enthalten, wenn Sie die XML-Gebäude sind, oder noch besser, erstellen Sie eine XElement anstatt manuell eine XML-Zeichenfolge zu erzeugen, die Sie dann lesen. Manuelles Erstellen von XML ist sehr selten eine gute Idee. Abgesehen von allem anderen, sind Sie, dass ValuePassedThrough vorausgesetzt bereits entgangen ist, oder nicht braucht usw. zu entkommen, dass können gültig -. Aber es ist zumindest ein Grund zur Besorgnis

Andere Tipps

Wie diese

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top