Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi XPath mit ADOM v4 möglich? (https://www.delphipraxis.net/181839-xpath-mit-adom-v4-moeglich.html)

Whookie 11. Sep 2014 17:49

XPath mit ADOM v4 möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich arbeite schon einige Zeit mit XML-Dateien aber habe bisher immer selber die Nodes durchlaufen. Heute wollte ich mal einwenig mit XPath spielen aber entweder habe ich noch ein Zuordnungsproblem oder irgendwas anderes geht nicht so wie es sollte!

Im angehängten Beispiel kann man über den Schalter "XPath..." eine Delphi .dproj Datei laden (zB.: die dieses Projekts) und danach sollten alle "CfgParent" Nodes abgefragt werden, aber egal der XPath-Ausdruck auch aussieht ich bekomme stets eine leere Liste zurück.

Der schöne Günther 11. Sep 2014 18:26

AW: XPath mit ADOM v4 möglich?
 
Das liegt doch am Namespace, oder?

Lösch testweise mal das xmlns="http://..." im obersten Knoten und wundere dich.

http://www.delphipraxis.net/159801-x...namespace.html

Whookie 11. Sep 2014 19:11

AW: XPath mit ADOM v4 möglich?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1272271)
Lösch testweise mal das xmlns="http://..." im obersten Knoten und wundere dich.

Auch das scheint keine Auswirkung zu haben jedenfalls nicht mit 'CfgParent' oder 'CfgParent/..'

Zitat:

Zitat von Der schöne Günther (Beitrag 1272271)

Ok, hab ich mal drüber geschaut aber wenn ich da den ganzen Baum durchlaufen muss kann ich die Tags gleich wieder selber rausholen.
Zudem gibts ja weder IXMLDOMNodeList und IXMLDOMDocument2 im adomxmldom.



Bleibt die abschließende Frage: Gibts eine XML Lib bei der XPath geht (kein MSXML)?

Der schöne Günther 11. Sep 2014 19:25

AW: XPath mit ADOM v4 möglich?
 
Zitat:

Zitat von Whookie (Beitrag 1272290)
Auch das scheint keine Auswirkung zu haben jedenfalls nicht mit 'CfgParent' oder 'CfgParent/..'

Ja, weil der String
Delphi-Quellcode:
'CfgParent'
kein XPath ist. Willst du jeden Knoten "CfgParent"? Dann ist der richtige XPath-Ausdruck dafür
Delphi-Quellcode:
'//CfgParent'
Delphi-Quellcode:
   If Supports(iDoc.DOMDocument.documentElement, IDomNodeSelect, iDNodeSelect) then
   begin
     iDNL := iDNodeSelect.selectNodes('//CfgParent');

     Memo1.Lines.Add(Format('Found %d items', [iDNL.length]));

     for i:= 0 to Pred (iDNL.length) do
      memo1.Lines.Append(idnl.item[i].nodeName+' = '+idnl.item[i].childNodes.item[0].nodeValue);

    end
    Else
      Memo1.Lines.Add('Not supported!');
  end;
ergibt

Code:
Found 7 items
CfgParent = Base
CfgParent = Base
CfgParent = Base
CfgParent = Cfg_1
CfgParent = Base
CfgParent = Base
CfgParent = Base


Vorausgesetzt du entfernst den Namespace.

Whookie 11. Sep 2014 20:11

AW: XPath mit ADOM v4 möglich?
 
Ah, ok, danke!
Hab mich eben erst einwenig in die XPath - Syntax eingelesen und dachte "CfgParent" wird als relativer Pfad interpretiert, denn wenn ich "PropertyGroup" ohne was angebe finde ich ja alle entsprechenden Knoten.

Whookie 12. Sep 2014 12:35

AW: XPath mit ADOM v4 möglich?
 
Ich habe mich noch etwas mit dem Thema befasst und einen Editor gefunden (XML Copy Editor) der es erlaubt XPath Ausdrücke zu testen. Nun hat aber auch der das selbe Problem mit den xmlns-Attributen (XPath funktioniert nur, wenn die Einträge vorher gelöscht werden).

Das heißt aber auch, das der Editor entweder auch Delphi ADOM einsetzt oder es sich um ein generelles Problem handelt, das mit ADOM nichts zu tun hat?

Im Netz habe ich ähnlich Probleme mit Java gefunden und die Möglichkeit dort einen NamespaceContext zu setzen und in den XPath-queries den Namespace mit anzugeben?!

Das wiederum wirft die Frage auf woher man so einen Namespace nun überhaupt her bekommt (und warum er benötigt wird, wenn in der Datei selber dann ja keiner verwendet wird - keiner der Delphi-DProj - Tags verwendet etwas wie <xyz:CfgParent>..</..>)...

Der Link im xmlns - Attribut selbst ist ja auch nicht weiter verfolgbar und damit stellt sich auch die Frage was den "xyz"-vom Beispiel oben sein könnte?

Und eine XPath Query dazu müsste dann: //xyz:CfgParent heißen??


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