![]() |
Von MSXML zu OmniXML kleines Problem aufgetreten
Hi
Also, ich rätsle hier schon sehr lange dran, doch wie ich euch kenne, findet ihr eine schnelle und einfache Lösung, auf die ich einfach mal wieder nicht gekommen bin :?: . Also, mein Problem ist, ich habe mit MS XML was gemacht, doch nun stellte sich herraus, dass auf dem Einsatzpc kein MS XML vorhanden ist und nicht installiert werden kann. Gut, dachte ich mir, dann suchste mal. Dabei ist OmniXML herausgekommen, die Lösung schien mir wunderbar, und es klappte wirklich, alle Befehle von MS XML umzuschreiben, war kein Problem, hatte ich hier ![]() Mein Problem ist nur der eine Schritt, bei dem das einfache umschreiben des Befehles zu einem Fehler führt. Hier mal der Code:
Delphi-Quellcode:
So, hier kommt an der Stelle
procedure TForm1.Button1Click(Sender: TObject);
var id: String; node: IXMLNode; begin id := Tabelle.Items[Tabelle.ItemIndex].Caption; node := XMLDoc.documentElement.selectSingleNode(id); node.selectSingleNode('daten') := ComboBox1.Text; XMLDoc.save(AppPath + 'database.xml'); UpdateList; end;
Delphi-Quellcode:
Ein Fehler, also tippe ich mal, dass irgendwas daran nicht stimmt, unter MS XML funzt es jedoch, das is das Problem.
node.selectSingleNode('daten') := ComboBox1.Text;
Was könnte ich noch machen? Oder hat einer ein ganzes Tut zu OmniXML? Von ![]() |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Hi,
ein Tutorial kann ich dir nicht liefern, allerdings die Lösung:
Code:
;)
node.selectSingleNode('daten')[color=#ff0000].text[/color] := ComboBox1.Text;
Chris |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Sorry, muss dich enttäuschen, funzt auch nicht, hatte auch nur vergessen, es oben in den Code zu schreiben, sry.
Wie könnte ich denn mal testen, ob es überhaupt an der Funktion liegt und nicht an der Tabelle, oder der ComboBox? Edit:
Delphi-Quellcode:
Habe es so gemacht und funzt auch nicht.
node.selectSingleNode('daten').text := 'Hallo';
|
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Hi,
prüfe mal, ob node überhaupt existiert (sprich <> nil ist). Ansonsten muss du gucken, ob deine XSL-Abfrage richtig ist. Chris |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Zitat:
|
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Hi,
stimmt das meine ich. :oops: Nachdem sakura einmal eine Variable sXSL genannt hat und dann damit XPath gemacht hat, komme ich ständig durcheinander. :mrgreen: *alles auf die katze schieb* ;) Chris |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Also, um es besser zu sehen, mal der ganze Code:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OmniXML, ComCtrls, StdCtrls; type TForm1 = class(TForm) Tabelle: TListView; Edit1: TEdit; Button1: TButton; Edit2: TEdit; Button2: TButton; Button3: TButton; Button4: TButton; ComboBox1: TComboBox; ComboBox2: TComboBox; procedure FormCreate(Sender: TObject); procedure UpdateList; procedure TabelleColumnClick(Sender: TObject; Column: TListColumn); procedure TabelleCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; XMLDoc: IXMLDocument; AppPath: string; ColumnToSort: Integer; LastSorted: Integer; SortDir: Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin AppPath := ExtractFilePath(Application.ExeName); XMLDoc := CreateXMLDoc; XMLDoc.DocumentElement := XMLDoc.CreateElement('daten'); if not FileExists(AppPath+'database.xml') then begin XMLDoc.loadXML('<?xml version="1.0" encoding="ISO-8859-1"?><Daten></Daten>'); end else XMLDoc.load(AppPath+'database.xml'); if XMLDoc.parseError.errorCode <> 0 then begin MessageDlg('Die XML Datei ist nicht korrekt!' + #13#10 + 'Das Programm wird nun beendet!', mtError, [mbOK], 0); Application.Terminate; end; UpdateList; end; procedure TForm1.UpdateList; var daten: IXMLNodeList; subNode: IXMLNode; i: integer; begin Tabelle.Items.Clear; Tabelle.Items.BeginUpdate; daten := XMLDoc.documentElement.selectNodes('daten'); for i:=0 to daten.length -1 do begin subNode := daten.item[i].selectSingleNode('name'); Tabelle.Items.Add; Tabelle.Items[i].Caption := subNode.Text; with Tabelle.Items[i].SubItems do begin subNode := daten.item[i].selectSingleNode('klasse'); if subNode <> nil then Add(subNode.Text); subNode := daten.item[i].selectSingleNode('projekt1'); if subNode <> nil then Add(subNode.Text); subNode := daten.item[i].selectSingleNode('projekt2'); if subNode <> nil then Add(subNode.Text); end; end; Tabelle.Items.EndUpdate; end; procedure TForm1.TabelleColumnClick(Sender: TObject; Column: TListColumn); begin ColumnToSort := Column.Index; if ColumnToSort = LastSorted then SortDir := 1 - SortDir else SortDir := 0; LastSorted := ColumnToSort; (Sender as TCustomListView).AlphaSort; end; procedure TForm1.TabelleCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var ix: Integer; begin if ColumnToSort = 0 then begin if SortDir = 0 then Compare := CompareText(Item1.Caption,Item2.Caption) else Compare := CompareText(Item2.Caption,Item1.Caption); end //if ColumnToSort = 0 then else begin ix := ColumnToSort - 1; if SortDir = 0 then Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]) else Compare := CompareText(Item2.SubItems[ix],Item1.SubItems[ix]); end; end; procedure TForm1.Button1Click(Sender: TObject); var id: String; node: IXMLNode; begin id := Tabelle.Items[Tabelle.ItemIndex].Caption; node := XMLDoc.documentElement.selectSingleNode('prowo/daten'+id); if node = nil then showmessage('is da'); node.selectSingleNode('daten').text := 'Hallo'; XMLDoc.save(AppPath + 'database.xml'); UpdateList; end; end. |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
1. Das hier
Zitat:
2. Bist du sicher, dass dein Dokument so aufgebaut ist
Code:
Zumindest sucht deine XPath-Anweisung nach diesem Knoten
<Daten>
<prowo> <daten1> <!-- 1 als Beispiel, weil ich nicht weiß, was "id := Tabelle.Items[Tabelle.ItemIndex].Caption;" für eine ID zurückgibt --> </daten1> </prowo> </Daten> Zitat:
Zitat:
4. Ist nicht gesagt, dass der Knoten "daten" dann auch existiert Zitat:
Delphi-Quellcode:
(Angabe ohne Gewähr, weil ich an MS-XML gedacht habe.)
subnode := node.selectSingleNode('daten');
// Knoten existiert if(subnode <> nil) then subnode.text := 'Hallo' else // Knoten existiert nicht, also: anlegen begin subnode := XMLDoc.createElement('daten'); if(subnode <> nil) then begin subnode.text := 'Hallo'; node.appendChild(subnode); end; end; |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
:cry: nix will klappen.
Mit MS XML geht es, genau wie du sagts, aber mit Omni will es einfach nicht, ich teste noch weiter, wenn ich was finde, sage ich es. Edit: Also, ich würde ja gerne mit MSXML arbeiten, aber wie kann ich das auf eineml PC ohne MSXML nutzen? |
Re: Von MSXML zu OmniXML kleines Problem aufgetreten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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