Benutzer mit den meisten Antworten
XML Literale und Namespace

Frage
-
Hallo
Ich habe einige Probleme mit der Verwendung von Namespaces in Literalen
Folgender Code:
Imports <xmlns="http://www.w3.org/2000/svg">
Dim a = <test1></test1>
Dim b = <svg><%= a %></svg>
b.Add(<test2></test2>)
b.Add(<test3></test3>)liefert dieses Ergebnis:
<svg xmlns="http://www.w3.org/2000/svg">
<test1></test1>
<test2 xmlns="http://www.w3.org/2000/svg"></test2>
<test3 xmlns="http://www.w3.org/2000/svg"></test3>
</svg>Das Ergebnis ist zwar richtig, ich hätte aber gerne, dass test2 und test3 ohne Namespace ausgegeben werden. Anscheinend geht dies nur, wenn ich die Childs direkt im Literal angebe. Ein späteres Hinzufügen über XElement.Add erkennt den Default-Namespace nicht.
Wie kann ich das umgehen ohne auf die Schreibweise XElement(GetXmlNamespace() + "test3") umsteigen zu müssen?
Vielen Dank
Armin Müller
Antworten
-
Hallo Armin,
schau Dir mal folgenden Blog-Beitrag an, da geht es um das gleiche Thema und ein Workaround:
Cleaning up your XML literal namespaces
http://msmvps.com/blogs/bill/archive/2007/11/24/cleaning-up-your-xml-literal-namespaces.aspx
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert ArminMueller Freitag, 4. Juni 2010 08:04
Alle Antworten
-
Hallo Armin,
wenn Du dem Namespace einen Namen gibts (wie unten mit mySpace), wird es in den Literalen weg gelassen, allerdings auch beim Root Element. Dort könntest Du es bei Bedarf noch mal explict hin schreiben.
Imports <xmlns:mySpace="http://www.w3.org/2000/svg">
Module Module1
Public Sub main()
Dim a = <test1></test1>
Dim b = <svg xmlns="http://www.w3.org/2000/svg"><%= a %></svg>
b.Add(<test2></test2>)
b.Add(<test3></test3>)
Console.WriteLine(b.ToString)
Console.ReadKey()
End Sub
End Module
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de -
-
Ich sage es mir immer wieder, nach Test und vor "Release" nichts mehr ändern ;-).
Im RootNode auch einen Namen ansgeben:
Dim b = <svg xmlns:mySpace="http://www.w3.org/2000/svg"><%= a %></svg>
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Elmar BoyeEditor Donnerstag, 3. Juni 2010 15:58
-
Hallo Olaf,
das ist es auch noch nicht. Jetzt bekomme ich
<svg xmlns:mySpace ="http://www.w3.org/2000/svg">
<test1></test1>
<test2></test2>
<test3></test3>
</svg>Es sollte aber
<svg xmlns ="http://www.w3.org/2000/svg">
<test1></test1>
<test2></test2>
<test3></test3>
</svg>heißen. Irgendwie funktioniert das ganze mit dem Default-Namspace nicht.
Vielleicht noch ne Idee?
Armin
-
Hallo Armin,
schau Dir mal folgenden Blog-Beitrag an, da geht es um das gleiche Thema und ein Workaround:
Cleaning up your XML literal namespaces
http://msmvps.com/blogs/bill/archive/2007/11/24/cleaning-up-your-xml-literal-namespaces.aspx
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort markiert ArminMueller Freitag, 4. Juni 2010 08:04
-
Hallo Armin,
das Problem ist zum Teil wie die Erweiterung von Visual Basic arbeitet.
Bei <svg><%= a %></svg> wird eine Ersetzung über interne Hilfsmethoden
vorgenommen, bei den Add-Methoden nicht.Imports <xmlns="http://www.w3.org/2000/svg"> Dim a = <test1></test1> Dim b = <svg><%= a %></svg> Dim c = <test2></test2> b.Add(c) Dim d = <test3></test3> b.Add(d) Console.WriteLine("Nodes: " + b.ToString()) ' Variante 2: Dim b2 = <svg><%= a %><%= c %><%= d %></svg> Console.WriteLine("Document: " + b2.ToString())
"b2" würde das gewünschte Ergebnis liefern, setzt aber voraus,
das durchgängig die Erweiterungen von VB genutzt wird.Willst Du Dich nicht einschränken lassen,
ersetze wie im Link von Thorstens Beitrag.
Oder verzichte auf die Syntax-Erweiterungen. -
Hallo Thorsten, Hallo Elmar,
vielen Dank für die Infos,mit dem Workaround hats funktioniert.
Es ist schade, dass sich die XML-Literale und die klassischen Funktionen der X-Objekte nicht so einfach mischen lassen. Manchmal sieht die Literal-Schreibweise einfach lesbarer aus
Gruß
Armin