Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Anführungszeichen werden als ASCII eingetragen. (https://www.delphipraxis.net/63288-anfuehrungszeichen-werden-als-ascii-eingetragen.html)

mcflaytasche 16. Feb 2006 11:44


Anführungszeichen werden als ASCII eingetragen.
 
Hallo,
bin schon länger hier am suchen
und ich habe immer was gefunden wo ich mir mit helfen konnte
aber diesesmal finde ich keinen Hinweis.

Habe vor mit JvSimpleXML eine XML-Datei auszulesen und Werte hinein zu schreiben.
Das lesen klappt hervorragend aber das schreiben bereitet mir Kopfzerbrechen.
Die XML-Datei sieht so aus:
Code:
<?xml version="1.0"?>
<Bookmarks>
  <Folder Name="Eigene Adresseintr&#xC3;&#xA4;ge"/>
  <Folder Name="Touristische Infos"/>
  <Folder Name="&#xC3;&#x9C;bernachtungsm&#xC3;&#xB6;glichkeiten"/>
  <Folder Name="Essen, Unterhaltung und Sport"/>
  <Folder Name="Verkehr und Info"/>
  <Folder Name="Sonstiges"/>
  <Folder Name="Ponsa Haus">
    <Bookmark Name="Lyngdal i Numedal (N 3624)">
      <ObjectID>202335464691</ObjectID>
      <Layer>Town</Layer>
      <x>1059647</x>
      <y>8370710</y>
    </Bookmark>
    <Bookmark Name="Lyngdal (N 4580)">
      <ObjectID>202335465105</ObjectID>
      <Layer>Town</Layer>
      <x>789160</x>
      <y>7990767</y>
    </Bookmark>
  </Folder>
</Bookmarks>
Aber immer wenn ich versuche ein solchen, <Folder Name="Sonstiges"/>, XML-Knoten zu erstell
werden die Anführungszeichen als &quot; eingetragen.
Delphi-Quellcode:
JvSimpleXML1.Root.Items.Add('Folder Name="'+edit2.text'"')
Hoffe ihr könnt mir helfen.
mcflaytasche

himitsu 16. Feb 2006 15:21

Re: Anführungszeichen werden als ASCII eingetragen.
 
Code:
JvSimpleXML1.Root.Items.Add('Folder Name="'+edit2.text[b][color=#ff0000]+[/color][/b]'"')
Hast du mal nachgesehn, was passiert, wenn du die " wegläßt?
Eventuell müßen/dürfen die ja nicht mit angegeben werden.

Also:
Delphi-Quellcode:
JvSimpleXML1.Root.Items.Add('Folder Name='+edit2.text)

Falls dann keine " in der XML erscheinen, schau doch mal nach, ob welche auftauchen, wenn du zwei Wörter, also irgendwas mit 'nem Leerzeichen zwischendrin in Edit2 übergibst.

mcflaytasche 16. Feb 2006 17:23

Re: Anführungszeichen werden als ASCII eingetragen.
 
Also dann bekomme ich beim Öffnen mit meinem Programm und beim Internet Explorer die Fehlermeldung das sie " fehlen.

marabu 17. Feb 2006 09:27

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hi, so geht das:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  e: TJvSimpleXmlElem;
begin
  e := SimpleXml.Root.Items.Add('Folder');
  e.Properties.Add('Name', 'Sonstiges');
  ShowMessage(SimpleXml.XMLData);
end;
Grüße vom marabu

mcflaytasche 17. Feb 2006 09:50

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hallo marabu,
jetz funzt es, bin ich glücklich.
Danke für die Hilfe.
Gruß
mcflaytasche

mcflaytasche 18. Feb 2006 10:04

Re: Anführungszeichen werden als ASCII eingetragen.
 
Habe schon wieder ein Problem!

Wie bekomme ich es hin das keine Folderknoten gemacht werden die den gleichen Namen haben?
Und wie kann ich dann in einem vorhandenen Folderknoten Einträge einfügen?
Gibt es eigendlich irgendwo eine Hilfe zu JvSimpleXML?
Hoffe auf Eure Hilfe
mcflaytasche

marabu 18. Feb 2006 15:39

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hi.

Das könnte dir weiterhelfen:

Delphi-Quellcode:
function ChildByProperty(
  eParent: TJvSimpleXmlElem; // parent element
  const
  sElement,                  // element name
  sProperty,                 // attribute name
  sPropValue: String;        // attribute value
  var
  eChild: TJvSimpleXmlElem   // first matching element
): Boolean;                  // true if element exists
var
  i: Integer;
begin
  Result := true;
  for i := 0 to Pred(eParent.Items.Count) do
  begin
    eChild := eParent.Items.Item[i];
    if (eChild.Name = sElement)
    and (eChild.Properties.Value(sProperty) = sPropValue) then
      Exit;
  end;
  eChild := nil;
  Result := false;
end;
Benutzen kannst du die Funktion so:

Delphi-Quellcode:
var
  e: TJvSimpleXmlElem;
begin
  if ChildByProperty(SimpleXml.Root, 'Folder', 'Name', 'Sonstiges', e) then
    ShowMessage('folder already exists');
end;
Grüße vom marabu

mcflaytasche 19. Feb 2006 09:40

Re: Anführungszeichen werden als ASCII eingetragen.
 
Guten Morgen marabu,
leider bekomme ich eine Fehlermeldung wenn ich Deinen Code eingebe:
Zitat:

[Error] Nav.pas(108): Undeclared identifier: 'ChildByProperty'
Als was muß ich den die Funktion anmelden?

Und wo beziehst Du Dein wissen über symplexml?

Gruß mcflaytasche

marabu 19. Feb 2006 11:15

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hi.

Wie hast du deinem Programm meine Funktion bekannt gemacht? Es würde schon genügen, wenn du sie vor deinem Aufruf einfügst.

marabu

mcflaytasche 19. Feb 2006 13:46

Re: Anführungszeichen werden als ASCII eingetragen.
 
Danke genau das war es, manchmal sieht man den Wald auch vor lauter Bäumen nicht.

Kannst Du mir irgend wie sagen wo Du bzw. wie Du auf diese Sachen zu Simplexml kommst
oder sind die anderen xml Komponenten identisch?

Gruß
mcflaytasche

mcflaytasche 19. Feb 2006 14:50

Re: Anführungszeichen werden als ASCII eingetragen.
 
Halli, hallo, hallöle,
bin es schon wieder.

Wie kann ich den jetzt in diesem Knoten der schon vorhanden ist weitere Einträge erstellen?

Sitze hier und mir qualmt schon die Mütze.

Gibt es irgendwo Infos über solche Sachen?

Gruß
Stefan

marabu 19. Feb 2006 15:26

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hallo Stefan,

ich bin vor vielen Jahren über NROFF und GML zu SGML, HTML und dann zu XML gekommen. Da ich die XML Spezifikation ganz gut verinnerlicht habe, weiß ich nach was ich in einer unabhängigen Parser-Implementierung Ausschau halten muss. Das einzige Problem mit der Jedi-Komponente SimpleXML sind die ungewöhnlichen Bezeichner für Methoden und Eigenschaften. Aber selbst mit dieser Hürde war es nicht wirklich schwierig die richtige Vorgehensweise zu finden - ohne Blick in die Quellen. Du siehst: keine Zauberei, keine Tricks. Vielleicht hat auch das eine Semester "Chinesische Weisheit" geholfen.

Wenn ich Quellen benutze um deine Fragen zu beantworten, dann werde ich die aufdecken. Ehrensache.

Dein neuerliches Problem ist eigentlich schon gelöst. Die Funktion ChildByProperty() liefert dir ja ein Element e, welchem du dann mit e.Items.Add() wieder Sub-Elemente zuordnen kannst.

Freundliche Grüße vom marabu

mcflaytasche 19. Feb 2006 16:45

Re: Anführungszeichen werden als ASCII eingetragen.
 
Hallo marabu,
:hello: ein riesiges Danke schön für Deine Hilfe. :hello:

Zitat:

Vielleicht hat auch das eine Semester "Chinesische Weisheit" geholfen.
Vielleicht sollte ich es damit mal probieren, da es mit dem Geist des Weines nicht so richtig klappen will. :zwinker:

Zitat:

Wenn ich Quellen benutze um deine Fragen zu beantworten, dann werde ich die aufdecken. Ehrensache.
Dachte ich mir aber man findet über Simplexml einfach zu wenig und das nicht nur im deutsch Sprachigem Bereich. :wall:

Zitat:

welchem du dann mit e.Items.Add() wieder Sub-Elemente zuordnen kannst
Habe ich mir fast gedacht nur falsch angegangen.
Hoffe ich komme nun alleine weiter. :zwinker:

Ein Hoffnungvoller
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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