Die Funktion XElement Add fügt xmlns="" zum XElement hinzu

8

Ich habe eine Funktion, die xml für ein Listenobjekt erzeugt:

%Vor%

Die template.ToString () liest: <RootElement xmlns="urn:testTools">

Das xml lautet: <Example><SubElement>testData</SubElement></Example>

Nachdem die Funktion "add" die Vorlage ausgeführt hat.ToString () lautet: <RootElement xmlns="urn:testTools"><Example xmlns=""><SubElement>testData</SubElement></Example>

Aus irgendeinem Grund wurde ein leerer Namespace hinzugefügt, wie kann ich das verhindern?

    
JJoos 19.02.2010, 10:22
quelle

4 Antworten

7

Setzen Sie den Namespace für die Example- und SubElement-Elemente auf denselben Wert wie für das RootElement. Es fügt die xmlns="" hinzu, um den Namespace für diese Elemente zu löschen.

    
Foole 19.02.2010, 11:20
quelle
9

Hier ist ein Beispiel, das xml ohne leere Namespaces ausgibt. Beachten Sie die bizarre Linq-zentrische Syntax rootNamespace + "MyElementName", was das Geheimnis ist. Dies ist der gleiche Namespace wie das gesamte Dokument, daher ist kein xmlns-Zusatz notwendig. Dies verkettet einen XNamespace + eine Zeichenkette, was eine "+" - Überladung ist, die für Linq funktioniert und mit der Linq umgehen kann. (Ohne Linq könnte es ein Kompilierfehler sein, einen String und einen Nicht-String-Typ zu verketten). Beachten Sie, dass dies für eine C # -Projektdatei ausgeführt wurde, bei der es sich um eine praktische Xml-Datei handelt. Gib es auf eine Konsole oder ein Richtextbox-Steuerelement aus. Dann nimm den "rootNamespace +" raus und merke den Unterschied.

%Vor%     
Wray Smallwood 23.04.2010 22:38
quelle
0

Ich habe es gelöst, indem ich die Elemente durch eine Regex ersetzt habe. Fooles Lösung hat nicht funktioniert, weil ich nicht immer den genauen Namespace zu diesem Zeitpunkt im Code hatte.

Also hier ist mein schmutziger Hack, der funktioniert:

%Vor%     
JJoos 15.03.2010 16:40
quelle
0

Es könnte sein, dass Ihr root ordnungsgemäß geschlossen werden muss:

%Vor%     
DotNetWala 10.03.2010 22:10
quelle