Decomposer string XML

survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 - 27 janv. 2010 à 21:32
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 5 févr. 2010 à 11:28
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

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
31 janv. 2010 à 17:52
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!
0
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 3
31 janv. 2010 à 21:37
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
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
5 févr. 2010 à 11:28
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!
0
Rejoignez-nous