Seite 3 von 8

Verfasst: 05.01.2005 13:07
von Kiffi
> @Kiffi
> Habe Dir vorsichtshalber entsprechende CodeSnippets per PN geschickt

erstmal vielen Dank für Deine PN. Ansi2Uni() und Uni2Ansi() sind nicht so
das grosse Problen. Die beiden Funktionen habe ich mir schon gestern aus
dem englischen Forum abgegriffen und eingebaut. ;)

Was mir ein wenig Sorgen bereitet, ist ReleaseObject(). aXend hat eine
universelle Funktion für die korrekte Entsorgung aller Objekttypen.

Bei meiner Implementation muss ich hingegen für jeden Objekttyp
(DOMDocument, DOMNode, DOMNodeList, etc.) eine gesonderte Funktion
schreiben. Das ist für mich kein generell Problem, sondern eher eines des
Anwenders. Er muss nämlich immer die richtige Funktion für den
entsprechenden Objekttyp aufrufen. Das ist weniger komfortabel als
generell ReleaseObject unabhängig von Objekttyp aufzurufen.

Eine entsprechende PN an aXend ist schon raus. Vielleicht lässt er mich ja
in seine Karten schauen ;)

Grüße ... Kiffi

Verfasst: 05.01.2005 13:20
von ts-soft
Würde mich auch interessieren, da ich einen DLL-Wrapper für eine ActiveX-DLL geschrieben habe. An Veröffentlichung habe ich bisher nicht gedacht, da ich die Einstellung wegen der Abhängigkeiten kenne. Wenn Du's weitergeben darfst, denk an mich :allright:

Gruß
Thomas

Verfasst: 06.01.2005 02:05
von Andre
@Kiffi: gibst Du bitte Bescheid, wenn Deine Lib "reif" für PureArea.net ist ?

Die ComLib muss mir wohl durch die Lappen gegangen sein, hoffe mal der Autor hat nichts gegen eine Veröffentlichung auf PureArea, dann wird diese noch bei den UserLibs ergänzt.

Verfasst: 07.01.2005 13:37
von derRaab
Hallo,

habe mir die Libs (COMLIB & PTMSXML3) 'installiert' und werde mich mal daran versuchen. Die Testdatei funktioniert zumindest schon mal. :)

Ich habe auch schon ein wenig rumgetestet und hänge gleich mal. Kann ich auch ein XML-Dokument komplett dynamisch erzeugen? Also ohne eine XML-Datei laden zu müssen?

Ich habe es mal so versucht, aber natürlich geht es nicht:

Code: Alles auswählen

;
; erste XML Gehversuche!
;
; notwendig sind die Bibliotheken COMLIB und PTMSXML3 (von Kiffi auf pure-board.de)
;
;


; neues DOM (Document Object Model) Dokument erstellen
DOMDoc = PT_MSXML3CreateDomDocument()

; Dokument selbst auswählen (gibt ja noch keine Knoten)
doc = PT_MSXML3SelectSingleNode(DOMDoc, "")

; neuen Knoten erstellen
rootNode = PT_MSXML3CreateElement(DOMDoc, "root")

; neuen Knoten anfügen - aber wie?
PT_MSXML3AppendChild(rootNode , doc)

MessageRequester("XML-Test", PT_MSXML3GetXml(DOMDoc)); 

PT_MSXML3ReleaseObject(rootNode)
PT_MSXML3ReleaseObject(doc)
PT_MSXML3ReleaseObject(DOMDoc)
Durch die Hilfe habe ich mich durchgekämpft aber das hat mir nicht richtig weiter geholfen.

Ausserdem würde ich gerne wissen, worin der genaue Unterschied zwischen CreateElement und CreateNode besteht? CreateNode sollte man nur einsetzen, wenn man eine entsprechende DTD benutzt?

Ist man jetzt eigentlich auf maximal 64kB beschränkt und läuft das nur unter Windows?

Fragen über Fragen...

Schon jetzt vielen Dank für diese Lib. Ich werde mich sicher ausgiebig damit rumschlagen. :)



Danke schon jetzt

:allright:

Verfasst: 07.01.2005 15:00
von Kiffi
> Kann ich auch ein XML-Dokument komplett dynamisch erzeugen?
> Also ohne eine XML-Datei laden zu müssen?

ja, kannst Du. Der einfachste Weg ist, einen String mit XML-Inhalt direkt in
das DOMDocument zu laden:

Code: Alles auswählen

 sXML.s = "<items><item></item></items>"
 DOMDoc = PT_MSXML3CreateDomDocument()
 PT_MSXML3LoadXML(DOMDoc, sXML)
 MessageRequester("XML-Test", PT_MSXML3GetXml(DOMDoc))
 [...]
> Durch die Hilfe habe ich mich durchgekämpft aber das hat mir
> nicht richtig weiter geholfen.

kein Wunder. Die Hilfe ist bis jetzt auch nur eine Befehlsreferenz.
Da wird ja noch nichts erklärt. :) Hole ich schnellstmöglich nach.

> Ausserdem würde ich gerne wissen, worin der genaue Unterschied
> zwischen CreateElement und CreateNode besteht?

der wohl augenscheinlichste Unterschied ist z.Zt., daß CreateNode
überhaupt nicht funktioniert ;)

Im Ernst: ich habe noch einen schweren Fehler in dieser Funktion und sie
aus diesem Grund vorübergehend stillgelegt.

Eine Alternative, um Nodes zu erzeugen ist die Funktion

Code: Alles auswählen

PT_MSXML3SpecialGetNodeFromString(sXMLString.s)
Kleines Beispiel:

Code: Alles auswählen

sXML.s = "<items/>"
DOMDoc = PT_MSXML3CreateDomDocument()
PT_MSXML3LoadXML(DOMDoc, sXML)
PNode = PT_MSXML3SelectSingleNode(DOMDoc, "items")
CNode = PT_MSXML3SpecialGetNodeFromString("<item/>")
PT_MSXML3AppendChild(PNode,CNode)
Debug PT_MSXML3GetXml(DOMDoc)
[...]
> CreateNode sollte man nur einsetzen, wenn man eine entsprechende
> DTD benutzt?

Nein, das ist DTD-unabhängig. Bei CreateNode kann man im Unterschied
zu CreateElement noch explizit den NodeTypen und den NameSpace
angeben.

> Ist man jetzt eigentlich auf maximal 64kB beschränkt und läuft das nur
> unter Windows?

der XML-Parser selber hat keine Grössenbeschränkung.

> Fragen über Fragen...

immer her damit :)

Grüße ... Kiffi

Verfasst: 07.01.2005 15:01
von Kiffi
@Andre:
> gibst Du bitte Bescheid, wenn Deine Lib "reif" für PureArea.net ist ?

jau!

Grüße ... Kiffi

Verfasst: 07.01.2005 16:09
von derRaab
Dankeschön für die schnelle Einweisung.

Na dann werde ich mich in den nächsten Tagen mal ransetzen und eine erste Anwendung damit realisieren.

@Kiffi: :allright:

Verfasst: 12.01.2005 17:39
von derRaab
Kann es sein, dass PT_MSXML3InsertBefore nicht funktioniert?

Verfasst: 12.01.2005 19:07
von derRaab
Hallo Kiffi,

ich hänge hier mit einigen Methoden.

Ein paar Fragen:

- PT_MSXML3InsertBefore funktioniert leider nicht. Bzw. ich habe es nicht hinbekommen. Mit PT_MSXML3AppendChild konnte ich arbeiten. Funktioniert der Befehl nicht oder wenn doch, kannst Du ein kleines Codebeispiel posten?

- Wie weise ich ein Attribut einem Knoten zu? Soweit bin ich, aber dann?:
; neues Attribut erstellen
;lAttibute = PT_MSXML3CreateAttribute(lItemNode, "url")
; URL als Attribut mit einfügen
;PT_MSXML3AttributePutValue(lAttibute , url)

Bin gespannt, ob es an mir lag. :)

Gibt es irgendwo schon eine detailiertere Hilfe?

Und mal noch eine allgemeine Frage: Hast Du diese Lib jetzt mit Assembler oder C programmiert oder ist das eine Art von PureBasic-Klasse?

Viel Vergnügen noch...

Verfasst: 13.01.2005 00:40
von Kiffi
Hallo derRaab,

> PT_MSXML3InsertBefore funktioniert leider nicht.

korrekt Leider ist da noch ein Fehler vorhanden, den ich noch nicht
beheben konnte. Versuche ich am Wochenende zu beheben.

> Wie weise ich ein Attribut einem Knoten zu? [...]
> Bin gespannt, ob es an mir lag. :)

Du warst schon auf dem richtigen Weg :):

Code: Alles auswählen

oNode = PT_MSXML3CreateElement(oDomDoc,"neuer_node")

oAttr = PT_MSXML3CreateAttribute(oDomDoc, "neues_attribut")

PT_MSXML3AttributePutValue(oAttr,"123")

oNodeMap = PT_MSXML3GetAttributes(oNode)

PT_MSXML3SetNamedItem(oNodeMap,oAttr)

Debug PT_MSXML3GetXml(oNode)

Debug PT_MSXML3AttributeGetValue(oAttr)
Zur Erklärung: Ein Attribut kann man nur einer Attribut-Collection eines
Nodes hinzufügen, die Du zuvor mit PT_MSXML3GetAttributes() ermitteln
musst. Ich werde aber noch eine *Special*()-Funktion in die Lib einbauen
(PT_MSXML3SpecialSetNamedAttribute()), die das Prozedere etwas
vereinfachen wird.

> Gibt es irgendwo schon eine detailiertere Hilfe?

nee, leider noch nicht. Ich habe einfach zu wenig Zeit dafür.

> Und mal noch eine allgemeine Frage: Hast Du diese Lib jetzt mit
> Assembler oder C programmiert oder ist das eine Art von
> PureBasic-Klasse?

Die Lib habe ich mit PureBasic in Verbindung mit TailBite erstellt

Grüße ... Kiffi