AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML: Namespace - Zuweisung funktioniert nicht

XML: Namespace - Zuweisung funktioniert nicht

Ein Thema von s-off · begonnen am 21. Mai 2006 · letzter Beitrag vom 17. Mär 2009
Antwort Antwort
Seite 3 von 5     123 45   
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#21

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 14:30
s-off,
ich habe mal die Knoten einer XML-Datei so ausgewertet:

Delphi-Quellcode:
function XMLGetSoftwareItems: TSoftwareItems;
// Gibt eine Liste der zu installierenden Software und deren Status
// für die grafische Aufbereitung zurück.
var
  XMLColl : IXMLDOMDocument2;
  XMLNodes : IXMLDOMNodeList;
  XMLNode : IXMLDOMNode;
  i, err : Integer;
  s : String;
begin


  XMLColl := CoDOMDocument30.Create;
  XMLColl.load( XMLFilename );

  err := XMLColl.parseError.errorCode;
  if err = 0 then
  begin
    XMLNodes := XMLColl.documentElement.selectNodes('setup');
    for i := 0 to XMLNodes.length -1 do
    begin
      XMLNode := XMLNodes.item[i];

      SetLength(Result, XMLNodes.length);

      Result[i].Status := StrToInstStatus(XMLNode.selectSingleNode('InstStatus').text);

      Result[i].Text := XMLNode.selectSingleNode('name').text;

      Result[i].ID := StrToIntDef(XMLNode.selectSingleNode('id').text, 0);

    end;
  end else
  begin
    Log(Format('In "XMLGetSoftwareItems" ist die Analyse der XML-Datei "%s" ist fehlgeschlagen:', [XMLFilename]), etError);
    Log(Format(' %s', [XMLColl.parseError.reason]));
  end;
end;
Das muss natürlich von Dir angepasst werden. Ich wollte nur die Funktionsweise aufzeigen.

Gruß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#22

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 14:37
Sascha, probiere es mal so:

... xmlDoc.selectSingleNode('/kml/Document/Folder') ... marabu
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#23

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 14:49
Funktioniert leider auch nicht:

Delphi-Quellcode:
procedure TfrmMain.toolbarButtons_btnOpenFileClick(Sender: TObject);
var
   Node: IXMLDOMNode;
begin
   if OpenDialog1.Execute then
   begin
      xmlDoc := CoDomDocument40.Create;
      xmlDoc.async := False;

      sXMLFileName := OpenDialog1.FileName;

      xmlDoc.Load(sXMLFileName);

      Node := xmlDoc.selectSingleNode('/kml/Document/Folder'); //<-- Node bleibt NIL

      showmessage(node.text);
   end;
end;
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#24

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 14:58
Also, wenn ich das richtig sehe sind in der Datei mehrere Knoten mit dem Namen "Folder" in der selben Ebene.
Du musst zuerst eine NodeList auf '/kml/Document/Folder' setzen und dann mit
einer SingleNode "NodeList[i]" darauf zugreifen um alle "Folder" zu durchlaufen.

Warum hast Du bei meinem Beispiel die NodeList ignoriert?
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#25

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 15:05
Hallo s14, ich habe eine NodeList, die ich Element für Element durchgehe ->

Delphi-Quellcode:
procedure TfrmMain.ShowFolders(Node: IXMLDOMElement; nParent: PVirtualNode);
var
   i: Integer;
   nlFolders: IXMLDOMNodeList;
   nName, nChild: IXMLDOMElement;
   TreeData: TTreeData;
begin
   ChangeCursor;
   tvTree.BeginUpdate;
   try
      tvTree.NodeDataSize := SizeOf(TTreeData);
      nlFolders := Node.selectNodes('Folder');
      for i := 0 to Pred(nlFolders.length) do
      begin
         nChild := nlFolders.item[i] as IXMLDomElement;
         nName := nChild.selectSingleNode('name') as IXMLDOMElement;
         TreeData.Caption := nName.text;
         TreeData.Node := nChild;
         ShowFolders(nChild, AddVSTStructure(nParent, TreeData, nChild));
      end;
   finally
      tvTree.EndUpdate;
      ChangeCursor;
   end;
end;
Ausgangspunkt ist hier Node, welche aus 'toolbarButtons_btnOpenFileClick' (siehe Vorbeitrag) kommt.
Wenn Du Dir meine vorherigen Beiträge anschaust, wirst Du sehen, dass ich diesbezüglich schon viel herumexperimentiert habe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#26

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 16:21
Hallo Sascha,

der angegebene XPath ist jetzt korrekt für den aktuellen Kontext. Wenn trotzdem das Ergebnis nil ist, dann ist der Knoten "Folder" nicht der einzige Knoten mit diesem Namen. Du musst dann noch ein identifizierendes Merkmal mit aufnehmen, damit der Zugriff eindeutig wird.

marabu
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#27

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 16:58
Zitat von s-off:
<kml xmlns="http://earth.google.com/kml/2.0">
Vorsicht, ich glaube, hier liegt der casus cnactus...

Du deklarierst hier einen sogenannten "Empty Namespace", und das mag der M$-XML-Parser überhaupt nicht. (Irgendwo im msdn steht das auch, dass er das nicht mag...)

Aber ein wenig Workaround schafft Abhilfe:

Delphi-Quellcode:
aXMLDOMDoc.setProperty('NewParser', true);
aXMLDOMDoc.setProperty('SelectionLanguage', 'XPath');
aXMLDOMDoc.setProperty('SelectionNamespaces', 'xmlns:ENS="http://earth.google.com/kml/2.0"'); // Den empty ns (=ENS) dem Parser mitteilen.
der entsprechende XPath-Befehl sieht dann so aus:
    aXMLDOMDoc.selectSingleNode('/ENS:Knoten1/ENS:Knoten2/ENS:Knoten3...usw.'); Gruß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#28

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 17:09
Hallo Armin,

hier liegt ein default namespace vor - kein empty namespace.

Grüße vom marabu
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#29

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 17:16
Zitat von marabu:
Hallo Armin,

hier liegt ein default namespace vor - kein empty namespace.

Grüße vom marabu
Ähm, entschuldige, ich meinte natürlich einen default namespace...

Ändert aber nichts an der Tatsache, dass der M$-XML-Parser damit nicht umgehen kann.

Ich habe jetzt nicht genau die Stelle im msdn gefunden, in der es geschrieben steht, aber dafür folgendes:

Zitat von msdn:
However, using default namespaces instead of utilizing explicitly mapped prefixes for element names can be confusing because it is not obvious that the elements in the document are namespace scoped.
Gruß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: XML: Namespace - Zuweisung funktioniert nicht

  Alt 22. Mai 2006, 17:29
Was wäre wenn du dich irren würdest? Nicht auszudenken - die Verwirrung bei den Lesern, welche weniger davon verstehen als ich und du. Kannst du es nicht einfach schnell mal ausprobieren? Die nötigen Testdaten stehen im PSDK oder auch der MSDN Online Library. Du musst auch kein Programm zum Testen schreiben. Nimm einfach MSXSL.EXE dazu.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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