Autor Beitrag
FrankTheFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 25.03.08 14:52 
Hallo,


ich programmiere bei der Arbeit mit BDS 2006. Ich habe von der Seite "www.philo.de/xml/downloads.shtml"
die "Utility Library v.2.0.12" heruntergeladen, ausgepackt und dann im Verzeichniss "...\Borland Studio-Projekte\Bpl"
liegen die "Utilities_D2006.bpl" und die "Xdom_4_1Delphi2006.bpl" (letztere nach herunterladen von "Extended Document Object Model "). Soweit gut! Habe nun die "XDOM 4.1" Komponente. Dann anlegen einer Form, daraufziehen von "TDomImplementation" und schon der nächste Fehler : "[Pascal Fataler Fehler] Unit1.pas(7): F1026 Datei nicht gefunden: 'XdomCore.dcu'" Woher bekomme ich denn die Komplilierte Unit XdomCore.dcu? Hat das Open XML geraffel schon mal jemand installiert?


Gruß
FrankTheFox
FrankTheFox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 25.03.08 20:01 
Titel: Ok, das Problem mit der Installation ist gelößt....
Hallo,


ich kann es nicht...Mein Problem ist der XPath mit xdom_4_1
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.btnParseXMLFileClick(Sender: TObject);
var
  XMLDomNode : TDomNode;
begin
   if length(XMLFilename) > 4 then
   begin
      DomImplementation1:=TDomImplementation.create(self);

      XmlToDomParser1:=TXmlToDomParser.create(self);

      XmlToDomParser1.DOMImpl:=DomImplementation1;

      XMLDomDoc := XmlToDomParser1.ParseFile(XMLFilename, false);

      XMLDomNode := XMLDomDoc.EvaluateToNode(xPath);

      ShowMessage(XMLDomDoc.FindFirstChildElement.NodeName);

      XMLDomNode := XMLDomDoc.DocumentElement.EvaluateToNode(xPath);

      //Das geht nicht egal welchen xPath ich nutze

      ....


auf der Form habe ich ...

ausblenden Delphi-Quelltext
1:
2:
     DomImplementation1: TDomImplementation;
     XmlToDomParser1: TXmlToDomParser;


egal welchen xPath ich benutze ich bekomme immmer die gleiche Fehlermeldung!

Im Projekt ... ist eine Exception der Klass ENot_Supported_Err mit der Meldung 'Not supported error.' aufgetreten.

In der Unit XdomCore...


ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TXPathExpression.SetContextNode(const Node: TDomNode);
begin
  if Assigned(Node) then
    if not (Node.RootDocument is TDomDocumentXPath) then


raise ENot_Supported_Err.Create('Not supported error.');


ausblenden Delphi-Quelltext
1:
2:
  FContextNode := Node;
end;



Nu bin ich mit meinem Latein am Ende. Vielleich weiß jemand warum sich der Kram so hartnäckig sträubt?

Ach ja das XML Dok....


ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<dok>
    <!-- ein XML-Dokument -->
    <kap title="Nettes Dokument">
        <pa>Ein Absatz</pa>
        <pa>Noch ein Absatz</pa>
        <pa>Und noch ein Absatz</pa>
        <pa>Nett, oder?</pa>
    </kap>
    <kap title="Zweites Kapitel">
        <pa>Ein Absatz</pa>
    </kap>
</dok>


ich kann als xPath 'dok', '//*', '/dok' eingeben nix geht....


Gruß
FrankTheFox
stefan6973
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 29.08.08 17:19 
Titel: Lösung: XPath mit OpenXMl XDom 4.1 Komponenten
Ohne weitere Kommentare,
Stefan

[delphi]
procedure TMainForm.btnEvaluateClick(Sender: TObject);
var
Di: TDomImplementation;
X2d: TXmlToDomParser;
Dd: TDomDocument;
Ddx: TDomDocumentXPath;
Srr: TStandardResourceResolver;


Xsdr: TXmlStandardDomReader;
Xnsg: TXmlNamespaceSignalGenerator;
Xdb: TXmlDomBuilder;
Xpe: TXPathExpression;

Begin

if not OpenDialog.Execute then exit;

Di := TDomImplementation.Create(self);
try

Srr := TStandardResourceResolver.Create(self);
try

Di.ResourceResolver := Srr;
X2d := TXmlToDomParser.Create(self);
try

X2d.DOMImpl := Di;
Dd := X2d.ParseFile(OpenDialog.FileName, false);
try

Xsdr := TXmlStandardDomReader.Create(Self);
try

Xsdr.DOMImpl := Di;
Xnsg := TXmlNamespaceSignalGenerator.Create(Self);
try

Xsdr.NextHandler := Xnsg;
Xdb := TXmlDomBuilder.Create(Self);
try

Xnsg.NextHandler := Xdb;
Ddx := TDomDocumentXPath.Create(Di);
try

Ddx.clear;
Xdb.ReferenceNode := Ddx;
if Xsdr.Parse(Dd) then
begin
Xpe := TXPathExpression.Create(self);
try

Xpe.ContextNode := Ddx;
Xpe.Expression := Edit1.Text;
if Xpe.Evaluate and xpe.HasNodeSetResult then
begin
ShowMessage(Xpe.ResultAsWideString);
end;

finally
Xpe.Free;
end; //try xpe := TXPathExpression

end;

finally
xdb.ReferenceNode := nil;
Ddx.Free;
end; //try Ddx := TDomDocumentXPath

finally
xnsg.NextHandler := nil;
xdb.Free;
end; //try xdb := TXmlDomBuilder

finally
xsdr.NextHandler := nil;
xnsg.Free;
end; //try xnsg := TXmlNamespaceSignalGenerator

finally
xsdr.DOMImpl := nil;
xsdr.Free;
end; //try xsdr := TXmlStandardDomReader

finally
Dd.free;
end; //try Dd := X2d.ParseFile

finally
X2d.DOMImpl := nil;
X2d.free;
end; //try X2d := TXmlToDomParser

finally
Di.ResourceResolver := nil;
Srr.Free;
end; //try Srr := TStandardResourceResolver

finally
Di.free;
end; //try Di := TDomImplementation

end;
[/delphi]


Zuletzt bearbeitet von stefan6973 am Fr 29.08.08 18:31, insgesamt 2-mal bearbeitet
GericasS
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 540

Windows Vista Home Premium
D2010, VisualStudio2008
BeitragVerfasst: Fr 29.08.08 17:21 
Delphi-Tags wären hier glaube ich angebracht :wink: damit man überhaupt iwas lesen kann.

Mfg,

GericasS

_________________
Alexander N.
Neue Bewaffnung Amilo xi2428 T9300
stefan6973
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 29.08.08 17:32 
user profile iconGericasS hat folgendes geschrieben:
Delphi-Tags wären hier glaube ich angebracht :wink: damit man überhaupt iwas lesen kann.

Mfg,

GericasS


Wenn Du genauer hin schaust siehst Du sie, leider ohne Wirkung. Kannst mir gerne verraten wie mans richtig macht.
stefan6973
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 29.08.08 18:36 
Titel: Re: Lösung: XPath mit OpenXMl XDom 4.1 Komponenten
Sich selbst zu antworten bewirkt wahre Wunder :D

user profile iconstefan6973 hat folgendes geschrieben:
Ohne weitere Kommentare,
Stefan

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
procedure TMainForm.btnEvaluateClick(Sender: TObject);
var
  Di: TDomImplementation;
  X2d: TXmlToDomParser;
  Dd: TDomDocument;
  Ddx: TDomDocumentXPath;
  Srr: TStandardResourceResolver;


  Xsdr: TXmlStandardDomReader;
  Xnsg: TXmlNamespaceSignalGenerator;
  Xdb: TXmlDomBuilder;
  Xpe: TXPathExpression;

Begin

  if not OpenDialog.Execute then exit;

  Di := TDomImplementation.Create(self);
  try

    Srr := TStandardResourceResolver.Create(self);
    try

      Di.ResourceResolver := Srr;
      X2d := TXmlToDomParser.Create(self);
      try

        X2d.DOMImpl := Di;
        Dd := X2d.ParseFile(OpenDialog.FileName, false);
        try

          Xsdr := TXmlStandardDomReader.Create(Self);
          try

            Xsdr.DOMImpl := Di;
            Xnsg := TXmlNamespaceSignalGenerator.Create(Self);
            try

              Xsdr.NextHandler := Xnsg;
              Xdb := TXmlDomBuilder.Create(Self);
              try

                Xnsg.NextHandler := Xdb;
                Ddx := TDomDocumentXPath.Create(Di);
                try

                  Ddx.clear;
                  Xdb.ReferenceNode := Ddx;
                  if Xsdr.Parse(Dd) then
                  begin
                    Xpe := TXPathExpression.Create(self);
                    try
                    
                      Xpe.ContextNode := Ddx;
                      Xpe.Expression := Edit1.Text;
                      if Xpe.Evaluate and xpe.HasNodeSetResult then
                      begin
                        ShowMessage(Xpe.ResultAsWideString);
                      end;

                    finally
                      Xpe.Free;
                    end//try xpe := TXPathExpression

                  end;

                finally
                  xdb.ReferenceNode := nil;
                  Ddx.Free;
                end//try Ddx := TDomDocumentXPath

              finally
                xnsg.NextHandler := nil;
                xdb.Free;
              end//try xdb := TXmlDomBuilder

            finally
              xsdr.NextHandler := nil;
              xnsg.Free;
            end//try xnsg := TXmlNamespaceSignalGenerator

          finally
            xsdr.DOMImpl := nil;
            xsdr.Free;
          end//try xsdr := TXmlStandardDomReader

        finally
          Dd.free;
        end//try Dd := X2d.ParseFile

      finally
        X2d.DOMImpl := nil;
        X2d.free;
      end//try X2d := TXmlToDomParser

    finally
      Di.ResourceResolver := nil;
      Srr.Free;
    end//try Srr := TStandardResourceResolver

  finally
    Di.free;
  end//try Di := TDomImplementation

end;