Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Only one top level element is allowed in an XML document ?? (https://www.delphipraxis.net/24358-only-one-top-level-element-allowed-xml-document.html)

Skyruner2 19. Jun 2004 20:40


Only one top level element is allowed in an XML document ??
 
Liste der Anhänge anzeigen (Anzahl: 1)
habe folgende fehlernachricht:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt MakeItReal.exe ist eine Exception der Klasse EOleException aufgetreten. Meldung: 'Only one top level element is allowed in an XML document'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Delphi-Quellcode:
  filename:=ExtractFilePath(Paramstr(0))+'settings.xml';
  if not(XMLsettings.FileName=filename) then
    XMLsettings.FileName:=filename;

  main.XMLsettings.Active:=true;

{....
 hier -->} xml:=xmlsettings.ChildNodes.Nodes['Makeitreal_settings'].ChildNodes.FindNode('AppSettings');
            xml.ChildNodes.Nodes['SiberianTime'].NodeValue:=stosettings.Time.Setting;
            xml.ChildNodes.Nodes['WeatherMode'].NodeValue:=stosettings.Weather.Setting;
            {..... more of the above}

          // save
          xmlsettings.SaveToFile(filename);
ich muss sagen dies ist die erste app die ich mit XML mache.

in einem anderen unit:

Delphi-Quellcode:
weathernode:=Main.XMLsettings.ChildNodes.Nodes['MakeItReal_settings'].ChildNodes.FindNode('WeatherStates');

....weathernode.ChildNodes.Nodes[i].Attributes['RUS_ANSI']
hab ich KEINE probleme...


:gruebel: warum also die fehler meldung in dem ersten code? :gruebel:


uff... schon 12 stunden nur am :coder: ich mach mir estmal was zu essen...

MathiasSimmack 19. Jun 2004 20:58

Re: Only one top level element is allowed in an XML document
 
Die Frage wäre, wie deine XML-Datei aussieht, denn die Fehlermeldung besagt doch IMHO, dass es nur einen obersten Knoten geben darf ... Was ja auch logisch ist, und ich gehe mal davon aus, dass dir das XML-Format bekannt ist.

Edit: Ah, ich sehe schon, die Datei ist eigentlich in Ordnung. Hm, komisch ...

Skyruner2 19. Jun 2004 22:52

Re: Only one top level element is allowed in an XML document
 
ich benutze da MS XML notepad. ich denke es wird keine fehler machen.... aber man weis nie...


hmm werd ich wohl bis morgen warten müssen....

Skyruner2 21. Jun 2004 14:25

Re: Only one top level element is allowed in an XML document
 
ich habe immer noch keine lösung gefunden.. :(

könnt ihr nicht nochmal sehen?

tommie-lie 21. Jun 2004 16:30

Re: Only one top level element is allowed in an XML document
 
Also ich habe es eben mit MS XML ausprobiert, keine Fehler. Auch Mozilla liefert keine Fehlermeldung beim Parsen.
Allerdings scheinst du da ja auch irgendeine andere Klasse zu benutzen.

Skyruner2 21. Jun 2004 16:47

Re: Only one top level element is allowed in an XML document
 
ich benutze die XMLdokument komponente...

Skyruner2 23. Jun 2004 17:56

Re: Only one top level element is allowed in an XML document
 
die lösung via experts-exchange.com :


Zitat:

Zitat von Workshop_Alex @ Experts-exchange.com
First of all, download XMLSpy from http://xmlspy.com/ since it's a real useful tool. If you can afford it, buy the professional version...

I checked your XML file and it seems to be okay. However, the line:
<?xml version="1.0" encoding="UTF-8"?>
Seems to be missing. Not a real problem, though.

Be aware that you can only have one top level node in an XML file. Thus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<MakeItReal_settings>
  <Bla/>
</MakeItReal_settings>
<MakeItReal_settings>
  <Bla/>
</MakeItReal_settings>
This would be illegal since you have two MakeItReal_settings root nodes. Furthermore, XML is case-sensitive thus MakeItReal_settings and makeitreal_settings are two different nodes. But you probably know this already.

No, wait. You forgot about the case-sensitivity... :)

xml:=xmlsettings.ChildNodes.Nodes['Makeitreal_settings'].ChildNodes.FindNode('AppSettings');
weathernode:=Main.XMLsettings.ChildNodes.Nodes['MakeItReal_settings'].ChildNodes.FindNode('WeatherStates');

You spelled it Makeitreal_settings and MakeItReal_settings which explains your error. It tries to create a new root node called MakeItReal_settings which of course isn't allowed.

Oops... :)



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