Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Parse Error - XPath Fehler bei verschachtelter Struktur (https://www.delphipraxis.net/82201-xml-parse-error-xpath-fehler-bei-verschachtelter-struktur.html)

arne99 8. Dez 2006 14:24


XML Parse Error - XPath Fehler bei verschachtelter Struktur
 
Hallo Leute,

und wieder benötige ich Hilfe:

Ich will folgende Art von XML File auslesen:

XML-Code:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE config SYSTEM "config-1_0.dtd">

<config>
<client>

<configuration name="name"
ds-name="ProjectDB"
service-url="local"
lfs-cache-path="d:\lfs"
lfs-config-name="Configname" />

<configuration name="name2"
ds-name="ProjectDB2"
service-url="local"
lfs-cache-path="d:\lfs"
lfs-config-name="Configname" />
</client>

...
Ich weiß nicht wie ich configuration tags komplett auslese.
Brauche name, ds-name, service-url, etc.

Wenn ich jedoch versuche es auszulesen erklärt mich BDS für verückt, weil das Start Tag da is, aber ein End Tag fehlt. (nicht passend ...)

Wie könnte ich dennoch diese configuration auslesen, hintereinander.

Danke an Alle!

[edit=sakura] Titel angepasst. Mfg, sakura[/edit]

Interceptor 8. Dez 2006 14:28

Re: XML Node ohne EndTag auslesen (OmniXML)
 
jedenfalls nicht mit den standard xml klassen, denn die erwarten imho alle wellformed xml.
bau dir halt ne stringlist und frag dann den entsprechenden wert ab

arne99 8. Dez 2006 14:30

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Aber kann man keine INformationen aus der XML auslesen die so gespeichert sind: ???

<configuration
node1="wert1"
node2="wert2"
node3="wert3" />

GEht nicht...gibts nicht?

Sascha L 8. Dez 2006 14:33

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Natürlich geht das, auch mit OmniXML.

XML-Code:
<test> </test>
und

XML-Code:
<test />
sind beide identisch und in Ordnung, da sie konform sind.

Einfach auf die Attribute zugreifen. Welche Fehlermeldungen bekommst du denn genau?

Interceptor 8. Dez 2006 14:36

Re: XML Node ohne EndTag auslesen (OmniXML)
 
wie gesagt, bei so einer verkorksten xmlfile wirst du mit XML-Parsern gegen die wand fahrn.
lad dir dein file in nem stream oder ähnlichem und frag die Attribute zeilenweise ab, ne andere lösung fällt mir zumindest nicht ein...

// EDIT:
Oops, ich seh grad dass dein File eigentlich valide sein sollte... ( <endtag /> )

arne99 8. Dez 2006 14:37

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, wie spreche ich das mit OmniXML an? (gibt es fuer OmniXML Tutorials die genau das abfangen?)

Der Fehler: SIehe Anhang

Khabarakh 8. Dez 2006 14:41

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Hast du dir die Fehlermeldung überhaupt einmal näher angesehen? Du hast uns bis jetzt keine einzige betroffene Zeile gezeigt, da können wir nur Däumchen drehen.

arne99 8. Dez 2006 14:44

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Angefangen hatte ich so:

Delphi-Quellcode:
begin
  if sopendialog1.Execute then
       begin
       // try
  doc:=createxmldoc;
doc.Load(sOpenDialog1.filename);
 Doc.DocumentElement.SelectNodes('configuration');
slabel1.Caption:=  command.Text ;
       end;

arne99 12. Dez 2006 10:25

Re: XML Node ohne EndTag auslesen (OmniXML)
 
Ich hab mich mit HIlfe von DP etc selbst weitergebracht, jedoch ist das hier echt kniffelig!

Mein Delphi-Code:
Delphi-Quellcode:
doc: IXMLDOMDocument;
  sName, sValue, xp: String;
  nl: IXMLDOMNodeList;
  iElem, iAttr: Integer;
  e: IXMLDOMElement;

begin


  if sopendialog1.Execute then
       begin


  doc := CoDomDocument.Create;
  doc.async := False;
  if doc.load(sopendialog1.FileName) then
  begin
    xp := 'lago-config/client/configuration';
    nl := doc.selectNodes(xp);
    for iElem := 0 to Pred(nl.length) do
    begin
      e := nl.item[iElem] as IXMLDOMElement;
      ShowMessage('tagname = ' + e.tagName);
      with e.attributes do
      begin
        for iAttr := 0 to Pred(length) do
        begin
          sName := item[iAttr].nodeName;
          sValue := VarToStr(item[iAttr].nodeValue);
          ShowMessage(Format('%s="%s"', [sName, sValue]));
        end;
      end;
    end;
  end else
    ShowMessage(doc.parseError.reason);
end;
end;
Und hier die XML File:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<lago-config>
<client>
<configuration name="test" name2="test2" />
<configuration name="test" name2="test2" />
</client>

<server>
<datasource name="test" name2="test2" />
<user name="test" password="test" />
</datasource>
</server>
</lago-config>
Der Parse Error Text lautet jetzt:
Code:
Das Endtag "datasource" stimmt nicht mit dem Startag "server" überein.
Das macht ja auch Sinn! WEil es verschachtelt ist. Könnt ihr mir helfen?

Wie muss ich den XPath ändern, dass ich das abfangen kann?
Anforderung ist nur, dass ich alle Infos rauslesen kann!

Danke im Vorraus!

Interceptor 12. Dez 2006 10:37

Re: XML Parse Error - XPath Fehler bei verschachtelter Struk
 
XML-Code:
<datasource name="test" name2="test2" />
<user name="test" password="test" />
</datasource>
Der Fehler liegt entweder in der 1. Zeile, indem du das tag mit "/" schließt...
oder du lässt das </datasource> weg


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