![]() |
Wie die Upper-case Funktion in XPath Suche verwenden?
Hi,
ich brauche die Suche nach Element mit bestimmten Wert case-insensitive machen. Z.B. in books.xml Datei
Delphi-Quellcode:
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.
<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> In der ![]()
Delphi-Quellcode:
Leider gibt der zweite Aufruf des SelectNode() eine "Exception class EOleException with 'message Unknown method. /bookstore/book[-->upper-case(title)<--=NARNIA]'.
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; 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 ![]()
Delphi-Quellcode:
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?
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; Boro |
Re: Wie die Upper-case Funktion in XPath Suche verwenden?
Schau mal
![]() Zitat:
XML-Code:
Wenn es funktioniert, dann kannst du 'en-US' durch 'de' ersetzen.
/bookstore/book[string-compare(title,'NARNIA','en-US','i')=0]
Wenn du Glück hast werden dann sogar deutsche Umlaute berücksichtigt. |
Re: Wie die Upper-case Funktion in XPath Suche verwenden?
Danke sx2008, aber leider funktioniert die string-compare Funktion nicht. Die Fehlermeldung ist die selbe
Zitat:
Bei der upper-case Funktion dachte ich, es geht nicht weil sie erst im XPath 2.0 implementiert ist. Aber die string-compare sollte auch im XPath 1.0 dabei sein nach dem Artikel im MSDN. Woher kommt der 'Unknown method' Fehler? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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