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

C# Discussion :

C#4/RegEx] Problème pour isoler une chaine


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut C#4/RegEx] Problème pour isoler une chaine
    Salut,

    J'aimerais retirer tous les xmlns:..."..." d'un doc xml.
    J'ai créé un pattern : "xmlns:.+=\"{1}.+\"{1}"

    utilisé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            private string RemoveXmlNS(string strXml)
            {
                return Regex.Replace(strXml, "xmlns:.+=\"{1}.+\"{1}", delegate(Match match)
                    {
                        return string.Empty;
                    });
            }
    Le problème c'est que le match ne s'arrête pas au deuxième " il s'arrête au dernier " du bloc xml. Du coup ça me vide la moité de mon doc.

    Pourriez-vous m'aider ?

    D'avance merci

    Laurent

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut
    Bonjour Laurent Jordi,

    J'ai trouvé cette discussion qui pourrait t'interesser :
    http://www.velocityreviews.com/forum...ument-net.html

    Edit : ... et celle là :
    http://stackoverflow.com/questions/9...rom-xml-with-c

    Bon courrage pour la suite.

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut Ca vire tous les attributs :(
    Re,

    Ca vire les attributs, à mon avis il faut travailler la regex pour qu'elle ne sélectionne qu'une seule occurence.

    ++

    Laurent

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Par défaut le regex va aller chercher la dernière occurrence trouvée. Il faut lui indiquer que c'est seulement la première que tu veux.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <table.*?>(.*?)</table>
    Va sélectionner la première table trouvée.

    Il faut jouer avec le caractère
    joint à un quantificateur.

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:[^=]{1}=\"{1}[^\"]+\"{1}

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    Finalement j'ai fait ça et ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            private string RemoveNS(string inputXmlString) {
                string toReturn = inputXmlString;
                Regex oRegex = new Regex("xmlns:.{3}=\"http://[^\"]*\"",RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase);
                MatchCollection matches = oRegex.Matches(toReturn);
                foreach (Match match in matches)
                {
                    toReturn = toReturn.Replace(match.Value, string.Empty);
                }
                return toReturn;
            }
    Attention, il faut l'utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(strXml);
                string toClean = xmlDoc.FirstChild.FirstChild.OuterXml;
                string cleaned = RemoveNS(toClean);
                xmlDoc.FirstChild.InnerXml = cleaned;
                toReturn = xmlDoc.OuterXml;
    Dernière modification par CUCARACHA ; 18/02/2011 à 16h50.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2014, 15h52
  2. Isoler une chaine d'une chaine, problème de regex?
    Par PaJe1005 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/06/2012, 09h36
  3. Problème pour chercher une chaine..
    Par shell13010 dans le forum Général Python
    Réponses: 8
    Dernier message: 31/10/2009, 20h34
  4. [RegEx] Très léger problème pour scinder une chaine
    Par joboy84 dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2008, 22h33
  5. Réponses: 12
    Dernier message: 04/09/2006, 17h59

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