![]() |
JvSimpleXML - Value für Namen und entsprechende Property
Hallo,
ich habe folgende XML-Struktur: ... <column> <type>string</type> <name lang="de">Seite</name> <name lang="en">page</name> <help lang="de">Deutsche Hilfe</help> <help lang="en">English help</help> </column> ... Kann ich ohne Schleife gezielt auf den Value von z.B. <name lang="en">page</name> zugreifen und wenn ja, wie? Danke für jede Hilfe. Marco. |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo Marco,
ich weiß nicht ob JvSimpleXML das kann, aber für einen solchen Zugriff wäre XPath das richtige Stichwort. Hoffe geholfen zu haben, Frederic |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo,
JvSimpleXML kann das. Du kannst den Value eines Eintrags sowohl über den Index des Items als auch über den Namen des Items ermitteln. Je nach Stuktur mußt du mit den Items etwas experimentieren um den richtigen "Level" (bei dir 'type') zu kriegen. könnte so aussehen: JvSimpleXML.Root.Items.ItemNamed['bla'].Value oder so: JvSimpleXML.Root.Items.Item[0].Items.Item[1].Items.Item[1].Items.ItemNamed['bla'].Value ...so in der Art, je nach Struktur deiner XML. Mußt du ein wenig selbst experimentieren. :hi: |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo,
@haentschman Danke für die Antwort. Ich verwende die Strukturen, die Du angegeben hast, bereits erfolgreich. Den Value von type kann ich problemlos ermitteln, aber wie soll dies für "<help lang="en">" funktionieren? Sowohl "<help lang="de">" als auch "<help lang="en">" haben ja als Key "help". Ich bräuchte also als eine Art "erweiterter" Key, z.B. "help@lang='de'"). Bei XPath verwendet man z.B. den Operator @ dafür. Gruß Marco. |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo Marco,
war wohl noch ein wenig früh heut morgen :gruebel: Ich schau mal, ob ich heut Abend vieleicht noch eine Lösung zusammenexperimentieren kann. Die XML Struktur ist vom Root her wie in deinem Beispiel ? bis später. :hi: Lösungsvorschlag:
Delphi-Quellcode:
Aufruf z.B.:
function TForm1.GetXMLValue(NodeName, NodeProperty: String): String;
var I: Integer; begin Result:= ''; for I := 1 to JvSimpleXML1.Root.Items.Count-1 do begin if (JvSimpleXML1.Root.Items.Item[I].Name = NodeName) and (JvSimpleXML1.Root.Items.Item[I].Properties.Value('lang') = NodeProperty) then Result:= JvSimpleXML1.Root.Items.Item[I].Value; end; end; GetXMLValue('help','de') ergibt nach deinem Beispiel als Rückgabewert "Deutsche Hilfe" GetXMLValue('name','de') ergibt nach deinem Beispiel als Rückgabewert "Seite" GetXMLValue('help','en') ergibt nach deinem Beispiel als Rückgabewert "English help" hoffe du kommst jetzt weiter. :thumb: |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo haentschman,
mit diesem Ansatz klappt es jetzt. Vielen Dank. :thumb: Aber wahrscheinlich ist der vorgeschlagene XPath-Ansatz konsequenter, weil man damit auf die Schleife verzichten kann. Ich werde mir demnächst XPath mal näher betrachten. OpenXML kann dies wohl. Gruß, Marco. |
Re: JvSimpleXML - Value für Namen und entsprechende Property
Hallo,
Zitat:
...jedenfalls waren alle Versuche mit "ItemNamed" in Abhängigkeit von der Property erfolglos. so blieb nur diese Variante. :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz