Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi [MSXML 4.0] - "case sensitive" bei selectSingleNode (https://www.delphipraxis.net/102738-%5Bmsxml-4-0%5D-case-sensitive-bei-selectsinglenode.html)

HuxXx 3. Nov 2007 16:46


[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:
 
{...} 
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;
Und hier mein Problem:
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.

marabu 3. Nov 2007 17:38

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:
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;
Grüße vom marabu

sakura 4. Nov 2007 08:42

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:...

Neuromancer 28. Nov 2007 17:05

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:
<?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>
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.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz