![]() |
Ideen für spezielle Stringbearbeitung
hallo delphianer
ich habe folgenden String aus einer Datenbank einer Fremdapplikation: <Baskets totalNumber="3"><Basket path="W:\briefkorb\test\" opened="false" isUserAssigned="true" /><Basket path="W:\briefkorb\test1\" opened="false" isUserAssigned="true" /><Basket path="H:\daten\Docuware\Ablage\" opened="false" isUserAssigned="false" /></Baskets> 1. Ich weiss nicht ob das XML ist?? 2. Wie kann ich diesen String dynamisch anpassen (die Briefkorb Pfade sollen geändert werden können). Je nach Benutzer kann die totalNumber der Baskets natürlich unterschiedlich sein. Somit ist ein StringReplace wohl nicht so geeignet? Mit welcher Methode würded ihr sowas bewerkstelligen? (Ich kenne mich nur mit Ini-File aus... Habe ich die Möglichkeit diesen String wie ein Ini-File zu bearbeiten?) Danke für Tips. |
Re: Ideen für spezielle Stringbearbeitung
Bei der Verwendung einer XML-Klasse
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
Es gibt mehrere XML-Parser für Delphi
![]() ![]() |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Ich hab nun ein paar von den Dingern angeguckt. Aber ich werd dennoch nicht schlau daraus. Mein XML String ist in einem Feld einer SQL Datenbank drin. Wenn ich das richtig sehe müsste ich aber da immer ein File angeben. Ich hab aber kein XML File sondern nur einen String. Hab jetzt die Mütze Kompo installiert. Da muss ich auch ein File angeben. Gibts eine Komponente wo ich direkt einen String einlesen kann? Ich arbeite mit Delphi 2007 Rad Studio. |
Re: Ideen für spezielle Stringbearbeitung
Unterstützt aber .LoadFromStream()
|
Re: Ideen für spezielle Stringbearbeitung
Zur not speicherst du den string halt? :wink:
Oder wie schon gesagt wurde mit einem Stream, was natürlich wesentlich eleganter wäre. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
ich kenn mich damit nicht aus. |
Re: Ideen für spezielle Stringbearbeitung
es geht wohl eher darum, mit deinen string in einen stream zu verpacken und diesen dann laden zu können. Nicht darum mit dem Stream irgendwas direkt aus der DB zu lesen.
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
ich habe also in der db einen string z.b. S. und wie mach ich jetzt daraus einen stream? |
Re: Ideen für spezielle Stringbearbeitung
Was für einen Datenbank? Welchen Typ hat das Feld?
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
bin jetzt etwas weiter gekommen:
habe eine XMLDocument Komponente aufs Form gelegt den XML String mal manuell in die XML Eigenschaft kopiert. Und folgenden Code geschrieben:
Delphi-Quellcode:
nun kommt aber die meldung:
procedure TForm1.Button1Click(Sender: TObject);
var wnode: IXMLNode; w: string; begin wnode:=xmldocument1.DocumentElement.ChildNodes[0]; w:=wnode.ChildNodes['Basket path'].Text; end; Dieser Name darf nicht das Zeichen '' enthalten: Basket--> <--path. Zur Erinnerung ein Teil meines XML Strings: <Baskets totalNumber="3"><Basket path="W:\briefkorb\nsa\" opened="false" isUserAssigned="true" /><Basket path="W:\briefkorb\tke\" opened="false" isUserAssigned="true" /><Basket path="H:\daten\Docuware\Ablage\" opened="false" isUserAssigned="false" /></Baskets> ich möchte Basket path auslesen und später dann auch mutieren... |
Re: Ideen für spezielle Stringbearbeitung
Basket heißt das Element, path ist nur ein attribut...
formatiert säh es so aus: <Baskets totalNumber="3"> <Basket path="W:\briefkorb\nsa\" opened="false" isUserAssigned="true" /> <Basket path="W:\briefkorb\tke\" opened="false" isUserAssigned="true" /> <Basket path="H:\daten\Docuware\Ablage\" opened="false" isUserAssigned="false" /> </Baskets> |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
und wie kann ich feststellen bei welchem basket ich grad bin? ich versteh das einfach nicht. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Ich kenne das XML anderst:
XML-Code:
<?xml version="1.0"?>
<TNMessageAcknowledgement> <AcknowledgementLocation>QUADREM</AcknowledgementLocation> <AcknowledgementReferenceNumber>CORRELATION ID = PO Number</AcknowledgementReferenceNumber> <AcknowledgementNote>Date: 07/04/2008:02:49:23 DocType: Order</AcknowledgementNote> <senderID>SELLER (XXX) DDID provided by Quadrem</senderID> <receiverID>BUYER (YYYY) DDID provided by Quadrem</receiverID> <messageID>Internal ID</messageID> </TNMessageAcknowledgement> |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
warum sollte es nicht Standard-XML sein?
sind alles Empty-Element-Tags, bis eben auf das Parent... und die XML-Deklaration (Version, Kodierung,...) ist optional... |
Re: Ideen für spezielle Stringbearbeitung
Delphi-Quellcode:
so in etwa sollte das ganze auch funktionieren...
procedure TForm2.Button1Click(Sender: TObject);
var anzahl: integer; wnode: IXMLNode; i: integer; begin XMLDocument1.LoadFromFile('E:\Dokumente und Einstellungen\Entwicklung\Desktop\test.xml'); anzahl:=XMLDocument1.DocumentElement.Attributes['totalNumber']; for i := 0 to anzahl-1 do begin showmessage(XMLDocument1.DocumentElement.ChildNodes.Nodes[i].Attributes['path']) end; end; mit
Delphi-Quellcode:
könntest du die attribute dann ändern...
XMLDocument1.DocumentElement.ChildNodes.Nodes[i].Attributes['path']:='C:\MeinPfad...';
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
kann mir mal jemand einen kleinen codeschnippsel wie ihr dieses problem lösen würded? ich seh im moment den wald vor lauter bäume nicht. ok, danke morphie. guck mir deinen code gleich mal an. bzw. probier mal aus... |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
So kenne ich das jedenfalls von Visual Basic. Sobald ein Umlaut im XML-Text ist, macht der parser schlapp... |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
ich krieg bei verwendung von deinem code den fehler: Variante des Typs (Null) konnte nicht in Typ (Integer) konvertiert werden |
Re: Ideen für spezielle Stringbearbeitung
Zeig mal deinen jetzigen Code, du hast den ja sicher ein wenig abgewandelt...
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Delphi-Quellcode:
getpath ist eine funktion von mir welche den aktuellen programmpfad zurückgibt (getestet und funktioniert 100pro) :)
procedure TForm1.Button1Click(Sender: TObject);
var anzahl: integer; wnode: IXMLNode; i: integer; begin XMLDocument1.LoadFromFile(getpath+'test.xml'); anzahl:=XMLDocument1.DocumentElement.Attributes['totalNumber']; for i := 0 to anzahl-1 do begin showmessage(XMLDocument1.DocumentElement.ChildNodes.Nodes[i].Attributes['path']) end; end; |
Re: Ideen für spezielle Stringbearbeitung
Und der XML-Inhalt liegt auch in der test.xml?
btw.
Delphi-Quellcode:
kann erstmal ganz raus, sorry ;-)
wnode: IXMLNode;
Hab nun feierabend, ich schau mir das gleich mal zuhause an... |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Dies ist auch nicht viel länger und funktioniert auf jeden Fall:
Delphi-Quellcode:
ExtractFilePath(ParamStr(0)
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
die kommt aus meiner spezial unit mit den ganzen gesammelten werken.... |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Ausserdem sind die meisten Delphi-Funktionen sehr optimiert und tausendfach im Einsatz. Ich such lieber ne halbe Stunde in der Delphi-Hilfe, bevor ich was selber in Angriff nehme. Wenn ich dann nichts finde, kann ich immernoch woanderst suchen oder mir die Finger wundtippen. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
aber viele funktionen sind auf meine bedürfnisse abgestimmt und keine standard dinger. so dass ich sie halt dennoch selber hingetippt hab. ich tipp eigentlich gerne.... |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Delphi-Quellcode:
für mich ist es einfach einfacher getpath zu schreiben ... darum hab ich das so gemacht.
function getPath: TFileName;
begin result:= ExtractFilePath(ParamStr(0)); end; die unit mit meinen funktionen und prozeduren bind ich eh in jedes programm ein daher kann ich immer überall alles gleich machen und habe somit meinen eigenen standard in der programmierung. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
hab mir den code nun 1:1 kopiert und getpath durch ExtractFilePath(ParamStr(0)) ersetzt. Sollte also eig. alles übereinstimmen... klappt ohne Probleme... Zeig doch nochmal den Inhalt der test.xml, da ist garantiert der Wurm drinne |
Re: Ideen für spezielle Stringbearbeitung
hab mir den code nun 1:1 kopiert und getpath durch ExtractFilePath(ParamStr(0)) ersetzt. Sollte also eig. alles übereinstimmen...
klappt ohne Probleme... Zeig doch nochmal den Inhalt der test.xml, da ist garantiert der Wurm drinne[/quote] der string ist riesengross und auf einer zeile im file drin... gibt das evtl. probleme? so ist es halt nunmal in der DB drin.... ich kann das nicht ändern. kann dir das file von hier auch nicht raufladen weil das hier nicht möglich ist (in der firma). das file fängt so an: DWUser version="5.1.0.1" uid="10" oid="1" mittendrin kommt dann das mit den baskets und am schluss: startDocuWareMinimized="false" /></DWUser> mach jetzt auch feierabend, und mach morgen weiter! danke erstmal |
Re: Ideen für spezielle Stringbearbeitung
Na da musst du den Code auch deiner XML-Datei anpassen... Mein Beispiel war eben nur für den kurzen Ausschnitt aus deinem 1. Post gedacht...
Deine Meldung Zitat:
An deiner Stelle würde ich vorher mit
Delphi-Quellcode:
und
XMLDocument1.DocumentElement.HasAttribute('')
Delphi-Quellcode:
usw. erstmal überprüfen, WO du dich grad überhaupt in deiner XML-Struktur befindest...
XMLDocument1.DocumentElement.nodename
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
hier noch der ganze XML String:
XML-Code:
<DWUser version="5.1.0.1" uid="10" oid="1" dw4uid="username" guid="094ae9eb-3f39-42e6-a33e-6f2658f8468e" oguid="6d807b13-1ecf-47a9-b31f-1b1134bd35e5" name="username" active="true" eMail="mailadresse" distribution="NetworkStartup" oldIniSettingsForDw="[bibl_00995018.184_RESULT]
COLFIXED=0
COLUMNWIDTHS=0026000129001730006800034002230007500036
[0ablage]
DISPLAYMODE=0
[4126528203dw5waste]
DISPLAYMODE=0
[banken_00963233.089_RESULT]
COLFIXED=0
COLUMNWIDTHS=00039000610003400036000360018100148001320003300036000360003600036000130003600036000360003600036000360003600036
[687238641test]
DISPLAYMODE=0
[personal_12841424.261_RESULT]
COLFIXED=0
COLUMNWIDTHS=00053000510003100029000610005800097000380005800093
[projekt_12841424.368_RESULT]
COLFIXED=0
COLUMNWIDTHS=001210006300061000320003200013
[780170000dw5waste]
DISPLAYMODE=0
[0scanner]
DISPLAYMODE=0
[504390781papierkorb]
DISPLAYMODE=0
[85362843user]
DISPLAYMODE=0
[1950194user]
DISPLAYMODE=1
" oldIniSettingsForViewer="[Dacs4]
LastOCRSetting=
LastBarcodeSetting=
" securityLevel="Normal"><Registered><FileCabinets totalNumber="5"><FileCabinet guid="1d8ea7b5-977c-4c08-b809-3ce0c67b9157" dbdatetime="00995018.184" path="C:\Documents and Settings\username\Local Settings\Temp\CtSCache\ContentServer\username\1d8ea7b5-977c-4c08-b809-3ce0c67b9157\Bibl.ADF" opened="true" isUserAssigned="false" /><FileCabinet guid="abcd0060-e615-4703-a0e2-a07ed99b13b0" dbdatetime="12841424.261" path="C:\Documents and Settings\username\Local Settings\Temp\CtSCache\ContentServer\username\abcd0060-e615-4703-a0e2-a07ed99b13b0\Personal.ADF" opened="true" isUserAssigned="false" /><FileCabinet guid="8e1e9306-d756-434e-ba64-dce190f8ba6e" dbdatetime="12841424.368" path="C:\Documents and Settings\username\Local Settings\Temp\CtSCache\ContentServer\username\8e1e9306-d756-434e-ba64-dce190f8ba6e\Projekt.ADF" opened="true" isUserAssigned="false" /><FileCabinet guid="c339340c-43ed-4769-b463-7ada38d8ba3e" dbdatetime="12841424.549" path="C:\Documents and Settings\username\Local Settings\Temp\CtSCache\ContentServer\username\c339340c-43ed-4769-b463-7ada38d8ba3e\Interess.ADF" opened="true" isUserAssigned="false" /><FileCabinet guid="b4a87a2f-c6ed-46a8-9d7c-91b619fc0050" dbdatetime="00963233.089" path="C:\Documents and Settings\username\Local Settings\Temp\CtSCache\ContentServer\username\b4a87a2f-c6ed-46a8-9d7c-91b619fc0050\banken.ADF" opened="true" isUserAssigned="false" /></FileCabinets><Baskets totalNumber="3"><Basket path="c:\temp\user\" opened="false" isUserAssigned="true" /><Basket path="c:\temp\user\" opened="false" isUserAssigned="true" /><Basket path="c:\daten\Docuware\Ablage\" opened="false" isUserAssigned="false" /></Baskets></Registered><MainWindow archivesVisible="true" basketsVisible="true" hierarchiesVisible="true" destBasketMdiState="false" defaultExportMode="0" exportMultiPageTiff="false" exportMergeOverlay="false" defaultImportMode="0" toolbarSize="false" activeImport="false" pendingBox="false" /><Login useDwLogin="true" /><Misc pathOfTrashCan="c:\daten\Docuware\Papierkorb" startDocuWareMinimized="false" /></DWUser>
|
Re: Ideen für spezielle Stringbearbeitung
Sehen alle XML-Strings in deiner Datenbank in etwa so aus, oder gibt es da unterschiede?
Ich meine von der Struktur her... |
Re: Ideen für spezielle Stringbearbeitung
Hallo,
hier eine kleine Starthilfe:
Delphi-Quellcode:
Statt MARKUP kann auch der Text aus der Datenbank eingesetzt werden.
uses
MSXML2; function CreateDocument(var doc: IXMLDOMDocument2; const markup: string): Boolean; begin doc := CoDomDocument.Create; doc.async := False; Result := doc.loadXML(markup); end; procedure TDemoForm.TestButtonClick(Sender: TObject); const MARKUP = '<Baskets totalNumber="3">' + '<Basket path="W:\briefkorb\test\" opened="false" isUserAssigned="true" />' + '<Basket path="W:\briefkorb\test1\" opened="false" isUserAssigned="true" />' + '<Basket path="H:\daten\Docuware\Ablage\" opened="false" isUserAssigned="false" />' + '</Baskets> ' ; XPATH = '//Basket[%d]/@path'; var doc: IXMLDOMDocument2; n: IXMLDOMNode; begin if CreateDocument(doc, MARKUP) then begin n := doc.selectSingleNode(Format(XPATH, [1])); ShowMessage(VarToStr(n.nodeValue)); n.nodeValue := ExtractFilePath(ParamStr(0)); ShowMessage(doc.xml); end else ShowMessage(doc.parseError.reason); end; Grüße vom marabu |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
was sicher variert ist die anzahl von baskets z.b.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz