AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Endtag finden

Ein Thema von Pader1305 · begonnen am 24. Aug 2018 · letzter Beitrag vom 27. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2      
Pader1305

Registriert seit: 13. Aug 2018
12 Beiträge
 
#1

AW: XML Endtag finden

  Alt 24. Aug 2018, 11:59
Vielen Dank schonmal für Ihre Antwort!

Vielleicht verdeutlicht eine Beispiels XML-Datei nocheinmal mein Problem.

Code:
<test>
   //Anderer Code
</test>

<test>
   //Anderer Code
</test>

<test>
   //Hier soll der entsprechende Code hinzugefügt werden
</test>
Ich weiß allerdings nicht, wie ich nur in den letzten Test-Tag etwas reinschreiben kann
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: XML Endtag finden

  Alt 24. Aug 2018, 12:30
Etwas erweitert:

Delphi-Quellcode:
const
  FileName = 'MyXmlFile.xml';
var
  N, N2: Integer;
  S: string;
begin
  S := TFile.ReadAllText(FileName);
  N := S.LastIndexOf('</');
  if N >= 0 then begin
    N2 := S.IndexOf( '>', N)+1;
    TFile.WriteAllText(FileName, S.Insert(N2, '<MyTag>MyValue</MyTag>'));
  end;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.074 Beiträge
 
Delphi 12 Athens
 
#3

AW: XML Endtag finden

  Alt 24. Aug 2018, 12:46
Vielleicht verdeutlicht eine Beispiels XML-Datei nocheinmal mein Problem.
Auf dieses Beispiel angewendet erzeugt mein Code-Beispiel folgendes:
Code:
<test>
   //Anderer Code
</test>

<test>
   //Anderer Code
</test>

<test>
   //Hier soll der entsprechende Code hinzugefügt werden
<MyTag>MyValue</MyTag></test>

Etwas erweitert:
Mit dem Code wird der Textblock aber nach dem letzten End-Tag eingefügt, was einem simplen Append ziemlich nahe kommt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:09
Ich will ja nichts schlechtreden, aber textbasiert XML bearbeiten finde ich etwas fahrlässig. Vor allem wenn das in Delphi doch so einfach geht:

Delphi-Quellcode:
implementation

uses XmlIntf, XmlDoc;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   xmlDoc:      IXMLDocument;
   lastNode:   IXMLNode;
begin
   xmlDoc := LoadXMLData(Memo1.Text);
   lastNode := xmlDoc.DocumentElement.ChildNodes.Last();
   // Mach was mit lastNode...
   lastNode.AddChild('thisIsANewNode');

   Memo2.Text := xmlDoc.XML.Text;
end;
Angehängte Grafiken
Dateityp: png beispiel.png (8,5 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Pader1305

Registriert seit: 13. Aug 2018
12 Beiträge
 
#5

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:40
Danke nochmal für eure Antworten, das hat mir auf jeden Fall schonmal weitergeholfen!

Allerdings hab ich soeben bemerkt, dass der Fehler schon woanders liegt und zwar im Laden der Datei.

Code:

XMLDocument1.LoadFromFile(FILEPATH);
Dort haut er mir bereits einen Fehler raus, da die Struktur der XML-Datei folgendermaßen aussieht und ich diese auch nicht verändern kann.

Code:

<?xml version="1.0" encoding="utf-8"?>

<Beispiel>

</Beispiel>

<Beispiel>

</Beispiel>
Die Datei, die geladen wird hat keinen übergeordneten Knotenpunkt und diese Datei liegt so auf einem Server vor. Wenn allerdings ein übergeordneter Knoten vorhanden ist, dann funktioniert alles einwandfrei.
Ich schätze da lässt sich nicht viel machen, korrekt?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:48
Wenn man kein gültiges XML hat kann man auch keinen XML-Parser bemühen
  Mit Zitat antworten Zitat
Pader1305

Registriert seit: 13. Aug 2018
12 Beiträge
 
#7

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:51
Wenn man kein gültiges XML hat kann man auch keinen XML-Parser bemühen
Ja, in der Tat. Ist nur sehr ärgerlich, dass mir das so spät auffällt.

Bin noch ganz neu in der Delphi-Programmierung. Wie sieht das denn aus, wenn man, wie die Vorgänger bereits erwähnten, die Datei stumpf als Textdatei ausliest, dann den entsprechenden Teil einfügt und schließlich als XML-Datei abspeichert?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.435 Beiträge
 
Delphi 7 Professional
 
#8

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:53
Bin mal naiv:

Datei in 'ne Stringliste laden und ein bisserl anpassen, ungefähr sinngemäß sowas:
Delphi-Quellcode:
var
  sl : TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile(FILEPATH);
  sl.Insert(1,'<reparaturtag>');
  sl.Add('</reparaturtag>');
  sl.SaveToFile(FILEPATH);
  sl.Free;
Sinnvoller wäre es, beim "Lieferanten" die Erstellung einer syntaktisch korrekten Datei einzufordern.
  Mit Zitat antworten Zitat
Pader1305

Registriert seit: 13. Aug 2018
12 Beiträge
 
#9

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:56
Bin mal naiv:

Datei in 'ne Stringliste laden und ein bisserl anpassen, ungefähr sinngemäß sowas:
Delphi-Quellcode:
var
  sl : TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile(FILEPATH);
  sl.Insert(1,'<reparaturtag>');
  sl.Add('</reparaturtag>');
  sl.SaveToFile(FILEPATH);
  sl.Free;
Sinnvoller wäre es, beim "Lieferanten" die Erstellung einer syntaktisch korrekten Datei einzufordern.

Das ist auch ein Lösungsvorschlag. Ich werde das mal durchsprechen, aber ein großes Dankeschön schonmal!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.435 Beiträge
 
Delphi 7 Professional
 
#10

AW: XML Endtag finden

  Alt 24. Aug 2018, 13:57
Wenn ich die Aufgabenstellung recht verstanden habe, muss bei den Dir vorliegenden Dateien immer in die vorletzte Zeile was eingefügt werden:
Delphi-Quellcode:
var
  sl : TStringList;
begin
  sl := TStringList.Create;
  sl.LoadFromFile(FILEPATH);
  sl.Insert(sl.Count - 1,'<myTag>irgendein Inhalt</myTag>');
  sl.SaveToFile(FILEPATH);
  sl.Free;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 +1. Es ist jetzt 11:08 Uhr.
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