![]() |
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:
Ich weiß nicht wie ich configuration tags komplett auslese.
<?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> ... 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] |
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 |
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? |
Re: XML Node ohne EndTag auslesen (OmniXML)
Natürlich geht das, auch mit OmniXML.
XML-Code:
und
<test> </test>
XML-Code:
sind beide identisch und in Ordnung, da sie konform sind.
<test />
Einfach auf die Attribute zugreifen. Welche Fehlermeldungen bekommst du denn genau? |
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 /> ) |
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 |
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.
|
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; |
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:
Und hier die XML File:
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;
XML-Code:
Der Parse Error Text lautet jetzt:
<?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>
Code:
Das macht ja auch Sinn! WEil es verschachtelt ist. Könnt ihr mir helfen?
Das Endtag "datasource" stimmt nicht mit dem Startag "server" überein.
Wie muss ich den XPath ändern, dass ich das abfangen kann? Anforderung ist nur, dass ich alle Infos rauslesen kann! Danke im Vorraus! |
Re: XML Parse Error - XPath Fehler bei verschachtelter Struk
XML-Code:
Der Fehler liegt entweder in der 1. Zeile, indem du das tag mit "/" schließt...
<datasource name="test" name2="test2" />
<user name="test" password="test" /> </datasource> oder du lässt das </datasource> weg |
Re: XML Parse Error - XPath Fehler bei verschachtelter Struk
Die XML File Struktur darf ich aber nicht ändern!
Die XML File wird von einem großen Programm und Plugin verwendet und ich schreibe dafuer gerade das Tool zur Anpassung! Der Endtag /> ist nicht das Problem, ohne Datasource geht es ja. Aber kann man diese Verschachtelung nicht lösen im Code? Kann man da was mit XPath-Anpassung erreichen? |
Re: XML Parse Error - XPath Fehler bei verschachtelter Struk
Hallo Arne,
es ist so wie David schreibt. Beim Anonymisieren der Originaldaten hast du einen Fehler gemacht, indem du das öffnende datasource tag zu einem empty tag gemacht hast. Ich denke im Original-Dokument ist dieser Fehler nicht drin. Freundliche Grüße |
Re: XML Parse Error - XPath Fehler bei verschachtelter Struk
Ihr habt Recht! Ihr konntet mir gut weiterhelfen und dafür ein großes DANKE an dieser Stelle!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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