![]() |
[MSXML 4.0] - "case sensitive" bei selectSingleNod
Hallo!
Ich benutze für mein Programm das MSXML 4.0 und lese dort einzelne Nodes wie folgt aus:
Delphi-Quellcode:
Und hier mein Problem:{...} Nick:= 'Hux'; // Eingabe vom Benutzer. newNode := xmlDoc.documentElement.selectSingleNode('/datenbank/user[nick="' + Nick + '"]'); try // Diesen Wert auslesen und anzeigen. ShowMessage(newitem1.selectSingleNode('blabla').text); except // Eintrag ist nicht vorhanden. end; Die Variable "Nick" wird vom User eingegeben. D.h. es kann sein, dass er ihn mal groß und mal klein eingeben kann. Gibt es da eine Möglichkeit bei selectSingleNode den Unterschied zwischen Groß- und Kleinschreibung zu ignorieren? Ich möchte die Daten gerne mit der Groß- und Kleinschreibung speichern, wie sie beim ersten Mal eingegeben wurden, weshalb lowercase/uppercase hier nicht in Frage kommt. Danke schonmal für die Hilfe. Greetz, Hux. |
Re: [MSXML 4.0] - "case sensitive" bei selectSingl
Hallo,
da hilft alles nichts: XML ist keine Benutzerschnittstelle. Du solltest eine Liste der Nicks aus deinem XML-Dokument in einer sortierten StringList führen und die Benutzereingaben damit normalisieren. XML ist nun einmal case sensitive.
Delphi-Quellcode:
Grüße vom marabu
function NormStr(const s: string; sl: TStrings): string;
var index: Integer; begin index := sl.IndexOf(s); if index < 0 then Result := s else REsult := sl[index]; end; |
Re: [MSXML 4.0] - "case sensitive" bei selectSingl
Lege zu jeder Node ein zweites Attribut an und nenne es lnick oder so und dort speicherst Du dann den Nick in Kleinbuchstaben. Beim Suchen wandelst Du dann die Eingabe auch in Kleinbuchstaben um und suchst im Feld lnick anstatt nick ;)
...:cat:... |
Re: [MSXML 4.0] - "case sensitive" bei selectSingl
Hallo,
eine andere Möglichkeit besteht darin, das XML-Dokument vor der Weiterverarbeitung durch einen XSLT-Prozessor zu jagen. Ein simuliertes UpperCase könnte zum Beispiel so aussehen:
XML-Code:
Wandelt innerhalb des Dokuments alle Inhalte von Knoten mit dem Namen "nick" in Großbuchstaben um. Anschließend kannst du bequem mit selectSingleNode und UpperCase arbeiten, ohne den eigentlichen Dokumentinhalt verändern zu müssen.
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="*"> <xsl:element name="{name()}"> <xsl:for-each select="@*"> <xsl:attribute name="{name()}"> <xsl:value-of select="." /> </xsl:attribute> </xsl:for-each> <xsl:choose> <xsl:when test="name()='nick'"> <xsl:value-of select="translate(current(),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" /> </xsl:when> <xsl:otherwise> <xsl:apply-templates /> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:template> </xsl:stylesheet> Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 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