Decomposer string XML

Signaler
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
Bonsoir,
Je n'arrive pas à décomposer cette string que je reçois par TCP
Je voudrais isoler les différents champs
12
XXXXXXXX
YYYYYYYY
2



<commands>
<command>
12
<destination></destination>
<name>ENTRANCE_WARNING</name>


<name>PARTICIPANT_SURNAME</name>
<value>XXXXXXXX</value>




<name>PARTICIPANT_FIRSTNAME</name>
<value>YYYYYYYY</value>




<name>SIMULATOR_ID</name>
<value>2</value>






</command>
</commands>



Merci pour votre aide

www.survey-copter.com

3 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonsoir

tu peux soit définir un schema XML pour décripter le message,
soit utiliser un regex du genre
public Regex FileElementRegex = new Regex(
      "(?:(?<commandId>\\d*)|<value>(?<Values>\\w*)</value>)",
    RegexOptions.IgnoreCase
    | RegexOptions.Multiline
    | RegexOptions.ExplicitCapture
    | RegexOptions.CultureInvariant
    | RegexOptions.Compiled
    );




C# is amazing, enjoy it!
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Merci pour les pistes
mais je suis néophyte dans le xml

je viens d'essayer ça

Regex FileElementRegex = new Regex(
"(?: (?<commandId>\\d*) |<value>(?<Values>\\w*)</value>)",
RegexOptions.IgnoreCase
| RegexOptions.Multiline
| RegexOptions.ExplicitCapture
| RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
string[] essai = FileElementRegex.Split(file);

avec file contenant ma string.

le seul bemol est que dans mon tableu des tring mes valeurs sont présentes dans les pointeurs impair et le reste du fichier dans les pointeurs pair.

Y a t il un moyen de ne garder que les bonnes valeurs (pointeurs impair) ?

Merci



www.survey-copter.com
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonjour

Il te faut utiliser les groupes retournés par le regex:

essaye:
            Regex FileElementRegex =  new Regex(
                "(?: (?<commandId>\\d*) |<value>(?<Values>\\w*)</value>)",
                RegexOptions.IgnoreCase
                | RegexOptions.Multiline
                | RegexOptions.ExplicitCapture
                | RegexOptions.CultureInvariant
                | RegexOptions.Compiled
                );


            MatchCollection matches  = FileElementRegex.Matches(file);
            // Report on each match.
            foreach (Match match in matches)
            {
                GroupCollection groups =  match.Groups;
                if (groups["commandId"].Success)
                    Console.WriteLine(groups["commandId"].Value);
                if (groups["Values"].Success)
                    Console.WriteLine(groups["Values"].Value);
            }

tu devrais obtenir :
[b]12
XXXXXXXX
YYYYYYYY
2/b


notes que tu peux également obtenir les tags pour les <name>
essaye:
             Regex FileElementRegex = new Regex(
      "(?: (?<commandId>\\d*) | \r\n<name>(?<name>\\w"+
      "*)</name> \r\n<value>(?<Values>\\w*)</value> \r\n

 )",
    RegexOptions.IgnoreCase
    | RegexOptions.ExplicitCapture
    | RegexOptions.CultureInvariant
    | RegexOptions.Compiled
    );



            MatchCollection matches  = FileElementRegex.Matches(file);
            // Report on each match.
            foreach (Match match in matches)
            {
                GroupCollection groups = match.Groups;
                if (groups["commandId"].Success)
                    Console.WriteLine("Commande: {0}",groups["commandId"].Value);
                if (groups["name"].Success)
                    Console.WriteLine("Name: {0} Value: {1}", groups["name"].Value, groups["Values"].Value);
            }


tu devrais obtenir
[b]Commande: 12
Name: PARTICIPANT_SURNAME Value: XXXXXXXX
Name: PARTICIPANT_FIRSTNAME Value: YYYYYYYY
Name: SIMULATOR_ID Value: 2/b

C# is amazing, enjoy it!