XElement-Funktion Hinzufügen fügt xmlns="" in den XElement -
Ich habe eine Funktion, die erzeugt xml für ein list-Objekt:
public XDocument ToXML()
{
foreach (var row in this)
{
var xml = row.ToXml();
template.Root.Add(xml);
}
return template;
}
Den Vorlage.ToString() liest: <RootElement xmlns="urn:testTools">
Den xml liest: <Example><SubElement>testData</SubElement></Example>
Nach dem add-in-Funktion ausgeführt hat, die Vorlage.ToString() liest: <RootElement xmlns="urn:testTools"><Example xmlns=""><SubElement>testData</SubElement></Example>
Also aus irgendeinem Grund war da ein leere namespace Hinzugefügt, wie kann ich verhindern, dass es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen Sie den namespace auf das Beispiel und-Element Elemente auf die gleiche wie das RootElement. Es ist das hinzufügen der xmlns="" klar den Namensraum für diese Elemente.
Hier ein Beispiel einer xml-Ausgänge ohne leer-namespaces. Beachten Sie die bizarre Linq-centric syntax rootNamespace + "MyElementName", das ist das Geheimnis. Dies ist die gleichen Namensraum wie das gesamte Dokument, also keine xmlns-Zusatz notwendig ist. Dies ist die Verkettung eine XNamespace + eine Zeichenfolge, die ein "+" überladen, dass für Linq und Linq weiß, wie man sich mit. (Ohne Linq könnte es einen compile-Fehler zu verketten, ein string und ein nicht-string-Typ). Hinweis: dieser ausgeführt wurde gegen ein C# - Projekt-Datei, die ist ein praktisches Xml-Datei. Ausgabe, die es auf einer Konsole oder einem richtextbox-Steuerelement. Dann nehmen Sie die "rootNamespace +" und den Unterschied bemerken.
Ich löste es durch das ersetzen der Elemente mit einer regex. Foole, der die Lösung hat nicht funktioniert, weil ich nicht immer jetzt die genaue namespace an diesem Punkt im code.
So, hier ist my dirty hack, der funktioniert:
Könnte es sein, dass dein root muss richtig geschlossen sein: