Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi & in einer XML-Datei (https://www.delphipraxis.net/46034-einer-xml-datei.html)

Tigermoon 17. Mai 2005 07:45


& in einer XML-Datei
 
Morgen,

habe ein Problem, hoffentlich kann mir jemand helfen...

wenn ich den inhalt meines memofeldes in einer xml datei speichere
und in dem textinhalt ein "&" war dann wir die datei beim auslesen
nur bis zum "&" ausgelesen und nicht weiter.

was kann ich da machen?

Steffi

marabu 17. Mai 2005 07:50

Re: & in einer XML-Datei
 
Normalerweise wird beim Speichern ein Ampersand als character entity & weggeschrieben.

Grüße vom marabu

Tigermoon 17. Mai 2005 07:56

Re: & in einer XML-Datei
 
ich speichere den inhalt in einem cdata

vielleicht liegt es daran???

marabu 17. Mai 2005 08:34

Re: & in einer XML-Datei
 
Zitat:

Zitat von Tigermoon
ich speichere den inhalt in einem cdata
vielleicht liegt es daran???

Zeige mal ein Minimal-Dokument mit deinem Problem.

marabu

MathiasSimmack 17. Mai 2005 08:36

Re: & in einer XML-Datei
 
Dann eigentlich erst recht nicht, denn IMHO wird
Code:
<![CDATA[Irgendein Text mit & zwischendrin]]>
auch so wieder angezeigt.

Tigermoon 17. Mai 2005 09:13

Re: & in einer XML-Datei
 
muss mich berichtigen
das zurück auslesen ins memofeld funktioniert

es funktioniert nur nicht wenn ich es in einen shellexecute einlesen möchte
dann schneidert es hinter dem "&" ab

quellcode zum aus lesen und erzeugen der shellexecute

Delphi-Quellcode:
   
if(FileExists(dateiname_laden))
    then begin

      // Datei wird gespeichert, das immer die aktuellsten Eingaben gespeichert sind
      datei_speichern('Mail');

      // Anlegen eines Objektes zum Auslesen
      XML_File := newXMLDocument;
      // Datei laden
      XML_File.LoadFromFile(dateiname_laden);

      montag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].ChildNodes['TEXT'].text;
      dienstag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].ChildNodes['TEXT'].Text;
      mittwoch := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].ChildNodes['TEXT'].Text;
      donnerstag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].ChildNodes['TEXT'].Text;
      freitag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].ChildNodes['TEXT'].Text;

      // der Text der Email wird erzeugt und das Emailsendenfenster aufgerufen
      ShellExecute(Application.Handle, 'open', PChar('mailto:'+adressen_an+'?cc='+adressen_cc+'&subject=Wochenbericht ' +
             Hauptmenu.kalender_woche.Text + '/' + Hauptmenu.jahr_auswahl.Text + '&body=' +
             'Montag: '+ Hauptmenu.montag_stunden.Text +' Stunden'+'%0D%0A' + StringReplace(montag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Dienstag: '+ Hauptmenu.dienstag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(dienstag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Mittwoch: '+ Hauptmenu.mittwoch_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(mittwoch, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Donnerstag: '+ Hauptmenu.donnerstag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(donnerstag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Freitag: '+ Hauptmenu.freitag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(freitag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' ), nil, nil, sw_ShowNormal);
    end;
die xml datei selbst sieht so aus

Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<WOCHENBERICHT>
<KW>20</KW>
<JAHR>2005</JAHR>
<EINTRAEGE>
<MONTAG><TEXT><![CDATA[Hallo & peter]]></TEXT><STUNDEN>1,5</STUNDEN></MONTAG>
<DIENSTAG><TEXT><![CDATA[]]></TEXT><STUNDEN>2,5</STUNDEN></DIENSTAG>
<MITTWOCH><TEXT><![CDATA[]]></TEXT><STUNDEN>4,5</STUNDEN></MITTWOCH>
<DONNERSTAG><TEXT><![CDATA[]]></TEXT><STUNDEN>4</STUNDEN></DONNERSTAG>
<FREITAG><TEXT><![CDATA[]]></TEXT><STUNDEN>6,5</STUNDEN></FREITAG>
</EINTRAEGE>
</WOCHENBERICHT>
also ich sehe im shellecexute nur hallo da stehen sonst nichts mehr
alles anderes is weg!!!

marabu 17. Mai 2005 10:14

Re: & in einer XML-Datei
 
Du hast kein XML-Problem. Das Ampersand wird im URL schon als Metazeichen gebraucht. Du musst den gleichen Escape-Mechanismus anwenden, wie du ihn schon bei der Zeilenschaltung verwendest. Ersetze in deinen Texten Ampersand durch %26 und alles wird gut.

marabu

Tigermoon 17. Mai 2005 10:25

Re: & in einer XML-Datei
 
und wie sieht das & für ihn (den pc) aus
wenn ich fragen darf?

zeilenumruch is #10
& is ???

marabu 17. Mai 2005 11:02

Re: & in einer XML-Datei
 
Zeilenvorschub (LF, linefeed) ist #10, Wagenrücklauf (CR, carriage return) is #13. Einen Zeilenumbruch in einer Windows-Textdatei stellt das Pascal-Literal #$0D#$0A dar. Wo du es im URL brauchst, da hast du schon den Escape-Mechanismus richtig verwendet: '%0D%0A'. Mach das jetzt noch für die Ampersands - meinetwegen wieder mit StringReplace. Die beiden Zeilen sind gleichwertig:

Delphi-Quellcode:
StringReplace(meinText, '&' , '%26' ,[rfReplaceALL]);
StringReplace(meinText, #$26, '%26' ,[rfReplaceALL]);
Die Verschlüsselung eines Zeichens kannst du sehen, wenn du das Programm Zeichentabelle aus deinem Windows-Zubehör aufrufst.

marabu

Tigermoon 17. Mai 2005 11:18

Re: & in einer XML-Datei
 
danke für die hilfe,
lieder hilft mir das nciht weiter

wenn ich den shellexecute öffne fehlt immernoch alles nach dem & zeichen

Deutsch: Es wird nix angezeigt!

Kann mir jemand helfen?
Hat jemand ne Idee

Delphi-Quellcode:
if(FileExists(dateiname_laden))
    then begin

      // Datei wird gespeichert, das immer die aktuellsten Eingaben gespeichert sind
      datei_speichern('Mail');

      // Anlegen eines Objektes zum Auslesen
      XML_File := newXMLDocument;
      // Datei laden
      XML_File.LoadFromFile(dateiname_laden);

      montag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].ChildNodes['TEXT'].text;
      dienstag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].ChildNodes['TEXT'].Text;
      mittwoch := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].ChildNodes['TEXT'].Text;
      donnerstag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].ChildNodes['TEXT'].Text;
      freitag := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].ChildNodes['TEXT'].Text;

      // soll angeblich das problem beheben tut es aber nicht!!!
StringReplace(montag, #$26 , '%26', [rfReplaceAll]);
      StringReplace(dienstag, #$26 , '%26', [rfReplaceAll]);
      StringReplace(mittwoch, #$26 , '%26', [rfReplaceAll]);
      StringReplace(donnerstag, #$26 , '%26', [rfReplaceAll]);
      StringReplace(freitag, #$26 , '%26', [rfReplaceAll]);


      // der Text der Email wird erzeugt und das Emailsendenfenster aufgerufen
      ShellExecute(Application.Handle, 'open', PChar('mailto:'+adressen_an+'?cc='+adressen_cc+'&subject=Wochenbericht ' +
             Hauptmenu.kalender_woche.Text + '/' + Hauptmenu.jahr_auswahl.Text + '&body=' +
             'Montag: '+ Hauptmenu.montag_stunden.Text +' Stunden'+'%0D%0A' + StringReplace(montag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Dienstag: '+ Hauptmenu.dienstag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(dienstag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Mittwoch: '+ Hauptmenu.mittwoch_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(mittwoch, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Donnerstag: '+ Hauptmenu.donnerstag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(donnerstag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' + '%0D%0A' +
             'Freitag: '+ Hauptmenu.freitag_stunden.Text +' Stunden'+ '%0D%0A' + StringReplace(freitag, #10 , '%0D%0A' ,[rfReplaceALL]) + '%0D%0A' ), nil, nil, sw_ShowNormal);
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz