AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ideen für spezielle Stringbearbeitung

Ein Thema von toyoman · begonnen am 21. Jul 2008 · letzter Beitrag vom 6. Aug 2008
Antwort Antwort
Seite 6 von 8   « Erste     456 78   
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#51

Re: Ideen für spezielle Stringbearbeitung

  Alt 24. Jul 2008, 10:16
Zitat von marabu:
Hallo,

hier eine kleine Starthilfe:

Delphi-Quellcode:
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;
Statt MARKUP kann auch der Text aus der Datenbank eingesetzt werden.

Grüße vom marabu
Hallo marabu

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.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#52

Re: Ideen für spezielle Stringbearbeitung

  Alt 24. Jul 2008, 10:16
Zitat von marabu:
Wenn du genau liest, dann findest du heraus, dass du ComsDOMDocument verwenden musst. klick
ok hab ich jetzt gefunden...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#53

Re: Ideen für spezielle Stringbearbeitung

  Alt 24. Jul 2008, 11:09
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.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#54

Re: Ideen für spezielle Stringbearbeitung

  Alt 24. Jul 2008, 11:28
Zitat von marabu:
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.
Den XML String hab ich hier schon eingefügt (eine Seite zurück im Thread).
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#55

Re: Ideen für spezielle Stringbearbeitung

  Alt 24. Jul 2008, 11:56
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.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#56

Re: Ideen für spezielle Stringbearbeitung

  Alt 25. Jul 2008, 08:03
Zitat von marabu:
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.
Ok, meine Prozedur schaut nun so aus:

Delphi-Quellcode:
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;
Und dabei krieg ich die erwähnte Meldung (im memo1.text ist genau der XML String drin welcher in Beitrag #37 drin steht... )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#57

Re: Ideen für spezielle Stringbearbeitung

  Alt 25. Jul 2008, 09:26
Moin,

kennst du keine Möglichkeiten einen Fehler einzugrenzen?

Versuche es mal so:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#58

Re: Ideen für spezielle Stringbearbeitung

  Alt 25. Jul 2008, 09:33
Zitat von marabu:
Moin,

kennst du keine Möglichkeiten einen Fehler einzugrenzen?

Versuche es mal so:

Delphi-Quellcode:
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;
Freundliche Grüße
In diesem Fall nicht, da ich mich damit nicht auskenne. Keine Ahnung wo ich da suchen soll.
Sonst wär ich wohl nicht hier im Forum drin...
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#59

Re: Ideen für spezielle Stringbearbeitung

  Alt 25. Jul 2008, 09:42
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#60

Re: Ideen für spezielle Stringbearbeitung

  Alt 25. Jul 2008, 10:10
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf