Hi,
ich brauche die Suche nach Element mit bestimmten Wert case-insensitive machen. Z.B. in books.xml Datei
Delphi-Quellcode:
<bookstore>
<book>
<title>Hobbit</title>
<author>J.R.R.Tolkien</author>
<published>2001-08-05</published>
<price>5.71</price>
</book>
<book>
<title>Narnia</title>
<author>C.S.Lewis</author>
<published>2002-03-21</published>
<price>4.52</price>
</book>
</bookstore>
brauche ich Element <book> mit dem SubKnoten <title> dessen Inhalt ist der Text 'Narnia' finden. Weil der Inhalt auch in klein oder alle in gross Buchstaben sein kann, währe eine Uppercase funktion behilflich.
In der
w3schools XPath Tutorial steht unter den Funktionen auch upper-case. Ich versuchte es mit dem Code
Delphi-Quellcode:
var
IDoc: IXMLDocument;
INode: IXMLNode;
begin
IDoc := LoadXMLDocument('.\books.xml');
INode := SelectNode(IDoc.DocumentElement,'/bookstore/book[price<5]/title'); // diese Suche funkzioniert
INode := SelectNode(IDoc.DocumentElement,'/bookstore/book[upper-case(title)=NARNIA]'); // diese hat Fehler
end;
Leider gibt der zweite Aufruf des SelectNode() eine "
Exception class EOleException with 'message Unknown method. /bookstore/book[-->upper-case(title)<--=NARNIA]'.
Weist jemand was soll ich machen um die Funktion 'upper-case' bekannt machen?
Ich verwende Delphi2006 unter winXPSP3 und
MSXML DomVendor.
Die Funktion SelectNode kommt aus einem
Beitrag vom Midiar zum OpenXML. Die sieht so aus
Delphi-Quellcode:
function selectNode(xnRoot: IXmlNode; const nodePath: WideString): IXmlNode;
var
intfSelect : IDomNodeSelect;
dnResult : IDomNode;
intfDocAccess : IXmlDocumentAccess;
doc: TXmlDocument;
begin
Result := nil;
if not Assigned(xnRoot)
or not Supports(xnRoot.DOMNode, IDomNodeSelect, intfSelect) then
Exit;
dnResult := intfSelect.selectNode(nodePath);
if Assigned(dnResult) then
begin
if Supports(xnRoot.OwnerDocument, IXmlDocumentAccess, intfDocAccess) then
doc := intfDocAccess.DocumentObject
else
doc := nil;
Result := TXmlNode.Create(dnResult, nil, doc);
end;
end;
Wie kann man zu der XPath Funktion upper-case kommen? Soll ich vieleicht die Type Library importieren von neueren Version der
MSXML? Ich hab sie bis jetzt nicht importiert und weis eigentlich nicht welche Version ich verwende. Ich denke das es die default 4.0 Version ist. Ich mache zwar die winXP updates regelmasig aber verwnede nicht den MSOffice und IE. Kann mir jemand einen Tip geben wie die upper-case Funktion verwenden konnen?
Boro