IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[XML] chercher un mot dans un XML


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut [XML] chercher un mot dans un XML
    Salut,
    J'ai mon XML suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
     <filtre>
       <mot>toto</mot>
       <mot>titi</mot>
       <mot>un autre mot</mot>
     </filtre>
    je voudrais ecrire la fonction TROUVE qui prend en paramètre un texte, si ce dernier existe dans le fichier xml elle retourne TRUE, sinon FALSE
    PS : sachant que la forme de mon XML est très simple, je peux parfaitement le remplacer par un fichier texte tout simple dont le contenu est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    toto
    titi
    un autre mot
    pensez-vous que la fonction TROUVE sera plus rapide avec ce fichier qu'avec un fichier XML?? si oui merci de me donner son code au lieu de celui de la version XML

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonsoir

    Le code suivant doit marcher avec ton xml (ou un fichier txt,html,aspx... ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim sFichier as string="C:/mofichierquitue.xml"
    Dim oEncodageANSI As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)
    Dim oStreamReader As New IO.StreamReader(sFichier, oEncodageANSI)
    Dim sContenuFichier As String = ""
    sContenuFichier = oStreamReader.ReadToEnd()
    oStreamReader.Close()
    If sContenuFichier.contains("titi") then
    'Contient titi
    End If
    A noter que la définition d'encodage n'est pas forcément nécessaire, mais ça permet d'être sûr de récupérer les caractères comme éàè ...
    Un fichier texte prend moins de place qu'un xml puisqu'il ne contient pas tous les caractères de balises, vu que c'est du web, gain de place=gain de bande passante .

    Bonne soirée

  3. #3
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    j'ai utilisé un fichier texte, et j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Compiler Error Message: BC30456: 'contains' is not a member of 'String'.
    l'erreur est à la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If sContenuFichier.contains( "mot2" ) then
    PS : je suis en vb et non en c#

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour

    bizarre, tu as quelle version du framework .Net ?

    A bientôt

  5. #5
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    j'ai trouvé ça dans une page d'erreur :
    Version Information: Microsoft .NET Framework Version:1.1.4322.2300; ASP.NET Version:1.1.4322.2300
    j'ai testé ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            '-Filtre--------------------------
                Try
                    Dim sr As StreamReader = New StreamReader("filtre.txt")
                    Dim line As String
                    Do
                        line = sr.ReadLine()
                        if line = pseudo.text then
                            lab_ok.text = line
                        end if
                    Loop Until line Is Nothing
                    sr.Close()
                Catch EVE As Exception
                    Response.Redirect("erreur_ouverture_fichier_filtre.html")
                End Try
    et bein ça va directement vers la page erreur_ouverture_fichier_filtre.html !! pourtant le fichier existe bien au meme endroit que le script !!!!

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re bonjour

    - La fonction Contains n'existe que dans le framework .Net 2.0 .

    -Pour ce qui est de l'erreur, tu confonds chemin physique et chemin virtuel...
    -chemin physique="C:/montext.txt"
    -chemin virtuel="montext.txt"

    Le contructeur du Reader ne marche qu'avec un chemin physique...

    Tu peux récupérer ce chemin avec la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Server.MapPath(".")
    Si elle existe en .Net 1.1 , elle te renvoie le chemin physique de la racine de ton site.

    Voilà

    A bientôt

  7. #7
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    puisque le 1er script ne fonctionne que sous le framework v2, alors je vais utiliser le 2eme, j'ai donc utilisé MapPath pour pointer sur le fichier que je voudrais ouvrir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Dim sr As StreamReader = New StreamReader(Server.MapPath(".") + "filtre.txt")
    ...
    mais ça ne marche tjr pas
    quelqu'un peut m'aider à résoudre ce script ou proposer un script qui peut tourner sur mon framework ?

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re Bonjour


    il manque le slash à la fin de MapPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    Dim sr As StreamReader = New StreamReader(Server.MapPath(".") + "\filtre.txt")
    ...
    A bientôt

  9. #9
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    MERCI ça marche nickel

  10. #10
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    maintenant j'ai un autre pb
    après avoir testé le script qui est ok, j'ai voulu modifier le contenu du fichier filtre.txt afin d'ajouter d'autres mots, mais mon client FTP ne peux plus modifier ce fichier (idem pour la suppression) et m'affiche le message d'erreur suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    550 /home/test/filtre.txt: The process cannot access the file because it is being used by another process.
    pourtant mon script effectue bien un close :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        Try
            Dim sr As StreamReader = New StreamReader(Server.MapPath(".") + "\filtre.txt")
            Dim line As String
            Do
                line = sr.ReadLine()
                if line = pseudo.text then
                    'detruire le ptr sur le fichier 
                    sr.Close()
                    
                    dim EXP1 as exception
                    throw EXP1
                end if
            Loop Until line Is Nothing
            sr.Close()
        
        Catch EXP1 As Exception
            'STOP : Mot trouvé dans le filtre
            Response.Redirect("affiche_err.html")
        End Try
    sachant que c'est le seul et unique script qui exploite le fichier filtre.txt !!!

  11. #11
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour

    "mon script effectue bien un close "

    oui mais pas dans ton Catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Catch EXP1 As Exception
            'STOP : Mot trouvé dans le filtre
            '...............pas de sr.close()..........
            Response.Redirect("affiche_err.html")
        End Try
    Bonne journée

  12. #12
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    j'ai déjà testé et ça marche pas : il me dit que sr est PRIVATE et donc il ne peut pas y accéder depuis le bloc CATCH !!!
    D'ailleur c'est pour ça que j'ai ajouté sr.Close() AVANT le throw exception !!

  13. #13
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re bonjour

    Ca n'a rien a voir avec le PRIVATE. Le problème vient du fait que ton reader est déclaré dans le bloc Try, tu ne peux donc pas y acceder dans un autre bloc de même niveau d'arborescence dans la fonction(suis-je clair, pas sûr ).
    Bref le code suivant devrait fonctionner....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    ...
    Dim sr As StreamReader = New StreamReader(Server.MapPath(".") + "\filtre.txt")
     Try
            Dim line As String
            Do
                line = sr.ReadLine()
                if line = pseudo.text then
                    'detruire le ptr sur le fichier 
                    sr.Close()
     
                    dim EXP1 as exception
                    throw EXP1
                end if
            Loop Until line Is Nothing
            sr.Close()
        Catch EXP1 As Exception
            'STOP : Mot trouvé dans le filtre
    sr.Close()
            Response.Redirect("affiche_err.html")
        End Try
    ...
    A bientôt

  14. #14
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    cool merci ça marche
    maintenant j'ai un autre pb : la recherche ne donne rien quand il s'agit d'un mot avec des accents !! Par exemple si je tape le mot été dans mon champ "pseudo" et que ce mot existe dans le fichier filtre.txt, et bien la boucle continue !!! j'ai pourtant bien testé et ça fonctionne bien si je donne un mot sans accents !!

  15. #15
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re re bonjour

    Essais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim oEncodageANSI As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)
    Dim oStreamReader As New IO.StreamReader(sFichier, oEncodageANSI)
    A Bientôt (pour la 5eme fois)

  16. #16
    Membre éclairé Avatar de sami_c
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Mai 2002
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 764
    Par défaut
    merci pour le(s) coup de pouce en fait j'ai gardé le code, mais j'ai seulement utilisé un fichier en utf-8, et ça a marché cependant je comprend quand meme pas le pb : je suis sous windows, le serveur est un win, j'ai utilisé notepad2 pour éditer mon fichier filtre.txt et ça n'a pas marché, il a fallu passer par un autre éditeur qui permet de choisir le format d'encodage pour que ça fonctionne !!!! j'ai déjà eu des pb d'incompatibilité de fichiers hétérogène (mac-win-unix), mais là on est dans un système homogène !!!

  17. #17
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour

    Tu as tout à fait raison exception faite de Notepad2 qui sort du TXT Unicode il me semble . Enfin le principal c'est que ça tourne!

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. outil pour remplacer des mots dans un xml
    Par hedibox dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/10/2013, 12h45
  2. [DOM] Chercher une valeur dans un xml DOM
    Par pierrepeso dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/08/2013, 18h18
  3. Réponses: 11
    Dernier message: 07/02/2006, 16h37
  4. Chercher des mots dans une ligne
    Par chemouz dans le forum C++
    Réponses: 1
    Dernier message: 17/12/2005, 12h42
  5. [XML][XSL]probleme html dans balise xml
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/12/2005, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo