XML Problem(e)

NRFi

Erfahrenes Mitglied
Hallo auch,

ich lese mit XmlDocument, also DOM ein XML-File aus (Warum ich nicht den XmlReader nehme ist jetzt mal Nebensache).

Jetzt latsch ich da rekursiv durch die XmlNodes. In der Rekursivfunktion steckt also eine foreach-Schleife foreach (XmlNode oNode in pXmlNode.ChildNodes).

Nun will ich den Text jedes Nodes haben, und woanders hintun.

Gegeben sei sowas wie
<bla>
<tralala>bla</tralala><bla2>nummero2</bla2>
</bla>

wenn ich jetzt oNode.Name = bla ist und ich InnerText abrufe, gibt er mir

"blanummero2" aus. Ich möchte aber "" haben, weil <bla> an sich keinen Text enthält, sondern nur seine Unterknoten, die mich aber zu dem Zeitpunkt nicht interessieren. Wie krieg ich das hin?
dann hab ich noch so tolle Phänomene, dass wenn oNode.Name = tralala ist und ich dann durch oNode.ChildNodes gehe, er einen weiteren Node findet, den es aber gar nicht gibt. Der Name des Tags heißt dann immer "#text". Wie kommt das zustande? den Node gibts doch gar nicht? kann ich den dann mit NodeType rausfiltern?

Diese Sachen hab ich durch Workarounds ziemlich dirty beheben können, aber es wäre schön, wenn es dafür saubere Lösungen/Erklärungen gibt.

Nochwas:
ich habe einen NodeNamen o:Author(Word-XML). In meiner XML-Datei gibt es einen NodeNamen author. Nun latsch ich die Nodes ab und will jedes author-Tag durch o:Author ersetzen. Klappt auch, der NAME des Nodes ist o:Author. Wenn ich das jetzt speichere, zeigt er mir in der XML-Datei aber Author an, weil er o als Prefix erkennt. Wie krieg ich das über XMLDOM hin, dass ich einen Tag erzeugen kann, der dann wirklich nachher in der XML-Datei o:Author heißt?

Wäre genial wenn ihr Ideen habt.

Danke und Gruß,

NRF

:)
 

broetchen

Erfahrenes Mitglied
Cosmo, der Linkmeister. Sag mal, hast du die alle im Kopf, oder sitzt du den ganzen Tag nur vorm Rechner und suchst dir Links heraus!? :p
 

Norbert Eder

Erfahrenes Mitglied
Schau dir einfach mal die XmlNode Klasse an und die Methoden SelectSingleNode und SelectNodes. Das sollte dir dann schon mal weiterhelfen.
 

Christian Kusmanow

Erfahrenes Mitglied
broetchen hat gesagt.:
Cosmo, der Linkmeister. Sag mal, hast du die alle im Kopf, oder sitzt du den ganzen Tag nur vorm Rechner und suchst dir Links heraus!?
;-) :p
Also ich hab ein sehr gutes Gedächtniss und eine sehr gut aufgeräumte Linksammlung.
Die hälfte der Links die ich poste stammen daher.
Die andere Hälfte such innerhalb von 30 sek - max. 5 Min, mehr brauchts nicht.

Die vielen Fragen hier zeigen einem, was in der IT Welt alles Möglich ist.
Sobald ich was neues entdecke will ichs auch wissen. Und poste halt fürs Ideen geben
meine gefunden Links.

Wie ich die finde? Ganz einfach -> :google: ;-]
 

NRFi

Erfahrenes Mitglied
Danke schon mal für die hilfe! Dank codeproject hab ich schon mal eine Lösung wegen dem #text.

Norbert, wüßte jetzt nicht, wie mir SelectSingleNodes helfen könnten. Ich lese die Sache ja rekursiv raus und das klappt ja alles. Kriege alle Nodes richtig geliefert. Nur das mit dem InnerText war falsch. Muss also wirklich Value abfragen, und von diesem Tag dann den Parent-Namen nehmen. Verstehe aber nicht, warum Value zwischendurch null ist, obwohl da Text drin ist. *konfus*

Das andere größere Problem ist die Sache mit dem ns, also o:Author.

Wie kann ich so einen Namen als Tag-Namen abspeichern? über DOM weiterhin.

Danke schon mal für die Tipps! :)
 

NRFi

Erfahrenes Mitglied
Habs jetzt so gemacht, dass ich das XMLDocument(knapp 230 kb in Datei) rekursiv auslese und in einem String Packe. Dabei ist die Datei kleiner geworden, weiß jetzt nicht woran das liegt und was da nicht mitgeschrieben wird, evtl ein Fehler in meiner Funktion.

Achja, StringBuilder > String :)
Wenn ich alles immer an einen String hänge, braucht der etwa 10mal so lange, wie wenn ichs über den StringBuilder mache.


Schade dass das mit den Namespaces nicht geklappt hat und ich das direkt über dom machen kann. Hab da was im Internet über NamespaceManager und AddNamespace gelesen, aber wenn ich jetzt nsm.AddNamespace("o","http://org.w3c.bla.blub"); sage, schreibt er mir erst gar keinen o:Author Tag. hm :(