Erstellen von XElement mit dem Standardnamespace für untergeordnete Elemente ohne Verwendung von XNamespace in allen untergeordneten Knoten

8

Ich versuche, System.Xml.Linq zu verwenden, um XHTML-Dokumente zu erstellen. Daher sollte die überwiegende Mehrheit der Knoten in meinen Bäumen diesen Namensraum verwenden:

%Vor%

Ich kann XElement Nodes, die auf diesen Namespace beschränkt sind, leicht genug erstellen, indem ich ein XNamespace verwende, wie folgt:

%Vor%

Ich möchte jedoch nicht XNamespace für den gesamten Code, der HTML-Knoten erstellt, verfügbar machen und jedem einzelnen XElement (und XAttribute ) Namen, den ich erstelle, einen Präfix geben.

Das XML-Textformat selbst berücksichtigt diese Anforderung und ermöglicht das Festlegen eines Standardnamespace in einem Vorgänger, der von Nachkommen geerbt wird. Dabei wird das reservierte xmlns -Attribut verwendet. Ich möchte etwas ähnliches mit System.Xml.Linq machen.

Ist das möglich?

    
Barry Kelly 25.01.2009, 17:34
quelle

3 Antworten

5

Ich habe mich entschieden, eine statische Klasse namens XHtml zu verwenden, die wie folgt aussieht:

%Vor%

Dies scheint die sauberste Art zu sein, Dinge zu tun, besonders, da ich dann Komfortroutinen hinzufügen kann, wie die XHtml.A -Methode (nicht meine ganze Klasse wird hier gezeigt).

    
Barry Kelly 07.02.2009, 15:11
quelle
3

Ich habe den rekursiv umschreibenden Pfad genommen. Sie müssen den Baum nicht wirklich "rekonstruieren". Sie können die Knotennamen einfach austauschen ( XName ).

%Vor%     
Julian Lettner 28.05.2010 14:03
quelle
1

Das Problem ist, dass der XName, der zum Erstellen des XElement verwendet wird, den richtigen Namespace angeben muss. Was ich versucht wäre, wäre eine statische Klasse wie folgt zu erstellen: -

%Vor%

Nun können Sie ein xhtml doc wie folgt erstellen: -

%Vor%

Ein alternativer Ansatz für diese statische Klasse wäre: -

%Vor%

Dies hat den Nachteil, dass alle möglichen X-Namen instanziiert werden, unabhängig davon, ob Sie sie verwenden, aber das Umgekehrte ist die Umwandlung von Namespace + "tagname" passiert nur einmal. Ich bin mir nicht sicher, ob diese Konvertierung sonst optimiert würde. Ich bin mir sicher, dass XNames nur einmal instanziert werden: -

%Vor%     
AnthonyWJones 25.01.2009 18:02
quelle

Tags und Links