UserLibrary XML-Wrapper: Betatester gesucht

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
derRaab
Beiträge: 71
Registriert: 30.12.2004 13:45
Wohnort: Berlin
Kontaktdaten:

Beitrag 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:
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Andre:
> gibst Du bitte Bescheid, wenn Deine Lib "reif" für PureArea.net ist ?

jau!

Grüße ... Kiffi
Benutzeravatar
derRaab
Beiträge: 71
Registriert: 30.12.2004 13:45
Wohnort: Berlin
Kontaktdaten:

Beitrag 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:
Benutzeravatar
derRaab
Beiträge: 71
Registriert: 30.12.2004 13:45
Wohnort: Berlin
Kontaktdaten:

Beitrag von derRaab »

Kann es sein, dass PT_MSXML3InsertBefore nicht funktioniert?
Benutzeravatar
derRaab
Beiträge: 71
Registriert: 30.12.2004 13:45
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
Antworten