![]() |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
in Bezug auf deinen Beispielcode: kannst du mir noch erklären was das mit dem MARKUP und XPATH auf sich hat? ist das der Suchstring oder für was brauchts das? Wenn ich jetzt deinen Beispielcode ausführe erhalte ich nämlich nur die Meldung: Ein XML-Dokument muss ein Element der obersten Ebene enthalten. Ich blick immer noch nicht durch. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
|
Re: Ideen für spezielle Stringbearbeitung
MARKUP ist bei mir einfach eine Konstante, bei dir der String mit dem DocuWare-XML, den du aus deiner Datenbank gelesen hast. Wenn mit dem XML-String irgendwas nicht stimmt, dann erhältst du eine Fehlermeldung, wie du ja gemerkt hast. Schau dir den XML-String mal genau an oder stelle den Text hier ein.
XPATH ist eine Spezifikation zur Addressierung einzelner DOM-Objekte. Der Zugriff über einen XPath-Ausdruck erspart dir umständliches Navigieren per Code. |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
hab jetzt den Markup zu einer Variable gemacht und meinen XML String zugewiesen. Dadurch erhalte ich nun die sehr aussagekräftige Meldung: "An dieser Stelle sind keine Leerzeichen zugelassen." Ich freue mich :) |
Re: Ideen für spezielle Stringbearbeitung
Dein XML-Dokument aus Beitrag #37 wird von meinem Beispiel-Code aus Beitrag #39 problemlos verarbeitet. Ich habe dein Dokument über die Zwischenablage in eine Datei kopiert und von dort zur Laufzeit in ein Memo geladen. Ich übergebe dann Memo.Text anstelle von MARKUP.
|
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Delphi-Quellcode:
Und dabei krieg ich die erwähnte Meldung (im memo1.text ist genau der XML String drin welcher in Beitrag #37 drin steht... )
procedure Tfrmxml.Button1Click(Sender: TObject);
function CreateDocument(var doc: IXMLDOMDocument2; const markup: string): Boolean; begin doc := ComsDOMDocument.Create; doc.async := False; Result := doc.loadXML(markup); end; const { MARKUP = '' + '' + '' + '' + ' ' ;} XPATH = '//Basket[%d]/@path'; var anzahl: integer; i: integer; doc: IXMLDOMDocument2; n: IXMLDOMNode; MARKUP : string; begin MARKUP := memo1.text; 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); { XMLDocument1.LoadFromFile(getpath+'test.xml'); if xmldocument1.DocumentElement.NodeName='Baskets' then begin anzahl:=XMLDocument1.DocumentElement.Attributes['totalNumber']; for i := 0 to anzahl-1 do begin showmessage(XMLDocument1.DocumentElement.ChildNodes.Nodes[i].Attributes['path']) end; end;} end; |
Re: Ideen für spezielle Stringbearbeitung
Moin,
kennst du keine Möglichkeiten einen Fehler einzugrenzen? Versuche es mal so:
Delphi-Quellcode:
Freundliche Grüße
function CreateDocument(var doc: IXMLDOMDocument2; const markup: string): Boolean;
begin doc := ComsDOMDocument.Create; doc.async := False; Result := doc.loadXML(markup); end; procedure ShowParseError(pe: IXMLDOMParseError); const FMT = 'line %d, linepos %d'#13'%s'#13#13'%s'; begin with pe do ShowMessage(Format(FMT, [line, linepos, reason, Copy(srctext, 1, linepos)])); end; procedure Tfrmxml.Button1Click(Sender: TObject); const XPATH = '//Basket[%d]/@path'; var doc: IXMLDOMDocument2; n: IXMLDOMNode; begin if CreateDocument(doc, Memo1.Text) then begin n := doc.selectSingleNode(Format(XPATH, [1])); ShowMessage(VarToStr(n.nodeValue)); end else ShowParseError(doc.parseError); end; |
Re: Ideen für spezielle Stringbearbeitung
Zitat:
Sonst wär ich wohl nicht hier im Forum drin... |
Re: Ideen für spezielle Stringbearbeitung
line 5, linepos 70
An dieser Stelle sind keine Leerzeichen zugelassen. oldIniSettingsForDW="[bibl_00995018.184_RESULT]#xD;#xA;COLFIXED=0# hab den String jetzt extra hier nochmal von Hand eingegeben und ich kann wirklich kein Leerzeichen entdecken. |
Re: Ideen für spezielle Stringbearbeitung
Du interpretierst die übersetzte Fehlermeldung falsch - mit Leerzeichen ist white space gemeint und dazu zählen auch die kodierten Zeilenumbrüche.
Dein Fehler tritt bei mir nicht auf, weil ich mit MSXML4 getestet habe, du aber wohl MSXML6 benutzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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