LINQ to SQL probleme avec elements presques identiques.

sh4gm4 Messages postés 47 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 2 octobre 2008 - 22 août 2008 à 11:09
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 23 août 2008 à 18:10
Bijour,


je cherche à récuperer avec LINQ les deux segment <seg> d'un <tu>,
le "en-US" et le "fr" en les renomants frSeg et enSeg dans ma variable query.
mais étant un peu novice sur LINQ et un peu rouillé dans la syntaxe SQL,
je galère !


le but derriere est de rentrer tout ca dans une BDD.


ci apres un sample de mon xml (tmx) et de mon code qui me renvoie deux fois le même segment.

Merci !

            XDocument tmx = XDocument.Load(strFile);
            var query = from t in tmx.Descendants("tu").Skip(10).Take(5)
                        where ((string)t.Element("tuv").Element("seg") != null &&
                               (string)t.Element("tuv").Element("seg") != "" )
                        select (string)t.Element("tuv").Element("seg") + "; " +
                               (string)t.Element("tuv").Attribute("lang") + "\r\n" +
                               (string)t.Element("tuv").Element("seg") + "; " +
                               (string)t.Element("tuv").Attribute("lang");

<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header creationtool="RC-WinTrans X8 TMX Macro" segtype="sentence" srclang="en-US" adminlang="en-us" o-tmf="xliff" datatype="plaintext">
</header>

<tu creationid="KVR_RCW8" creationdate="20071123T010101Z">
2 Final

OP16

Software


SharePoint2K3Eng.rc::LENG_IDD_LINK_BROWSE



    <tuv lang="en-US"><seg>Browse</seg></tuv>


<tuv lang ="fr"><seg>Parcourir</seg></tuv>

</tu>


<tu creationid="KVR_RCW8" creationdate="20071123T010101Z">
2 Final

OP16

Software


SharePoint2K3Eng.rc::LENG_IDD_LINK_BROWSE # IDC_LINK_REMOTE_FOLDERS


    <tuv lang="en-US"><seg>List</seg></tuv>
<tuv lang="fr"><seg>List</seg></tuv>
</tu>


<tu creationid="KVR_RCW8" creationdate="20071123T010101Z">
2 Final

OP16

Software


SharePoint2K3Eng.rc::LENG_IDD_LINK_BROWSE # IDC_STATIC


    <tuv lang="en-US"><seg>Remote file name:</seg></tuv>
<tuv lang="fr"><seg>Nom du fichier distant :</seg></tuv>
</tu>


<tu creationid="KVR_RCW8" creationdate="20071123T010101Z">
2 Final

OP16

Software


SharePoint2K3Eng.rc::LENG_IDD_LINK_BROWSE # IDC_STATIC


    <tuv lang="en-US"><seg>Files of type:</seg></tuv>
<tuv lang="fr"><seg>Format :</seg></tuv>
</tu>





-------------------------------------------------------------------
Diaboliser quelqu'un ne lui fait pas pousser les cornes et la queue...

3 réponses

sh4gm4 Messages postés 47 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 2 octobre 2008
22 août 2008 à 16:19
j'ai trouvé une methode autre que je vous mets ici
mais si quelqu'un a mieux, je suis prenneur !!!

        private void tmxRead()
        {
            XNamespace ad = "xml";
            XDocument tmx = XDocument.Load(strFile);
            var header = from t in tmx.Descendants("header")
                         select (string)t.Attribute("srclang");
            string strSrcLang = header.First();
            tbMain.Text += strSrcLang + "\r\n";
            var query = from t in tmx.Descendants("tu").Skip(10).Take(5)
                        where ((string)t.Element("tuv").Element("seg") != null &&
                               (string)t.Element("tuv").Element("seg") != "")
                        select t;
            tbMain.Text += "il y a " + query.Count().ToString() + " traductions:\r\n";
            for (int i = 0; i < query.Count(); i++)
            {
                tbMain.Text += i.ToString() + ":\r\n" +
                               query.ElementAt(i).Attribute("creationid").Value +
                               "\r\n" +
                               query.ElementAt(i).Attribute("creationdate").Value +
                               "\r\n" + query.ElementAt(i).Elements("tuv").Count().ToString() + "\r\n";
                for (int u = 0; u < query.ElementAt(i).Elements("prop").Count(); u++)
                {
                    tbMain.Text += "   " + u.ToString() + ": " +
                                   query.ElementAt(i).Elements("prop").ElementAt(u).Value +
                                   "\r\n";
                }
                for (int u = 0; u < query.ElementAt(i).Elements("tuv").Count(); u++)
                {
                    tbMain.Text += "\t" + u.ToString() + ": " +
                                   query.ElementAt(i).Elements("tuv").ElementAt(u).Attribute("lang").Value +
                                   "\r\n";
                    tbMain.Text += "\t  " +
                                   query.ElementAt(i).Elements("tuv").ElementAt(u).Element("seg").Value +
                                   "\r\n";
                }
            }
        }

-------------------------------------------------------------------
Diaboliser quelqu'un ne lui fait pas pousser les cornes et la queue...
0
sh4gm4 Messages postés 47 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 2 octobre 2008
22 août 2008 à 16:21
Précision le tbMain est un textBox dans lequel j'affiche mes resultats
car j'ai testé beaucoup de chose avant de réussir...
je m'attaque maintenant a la mise en base ca devrait être bien plus facile :)

-------------------------------------------------------------------
Diaboliser quelqu'un ne lui fait pas pousser les cornes et la queue...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
23 août 2008 à 18:10
Salut,

Pour LINQ je ne sais pas mais pour le contenu du code cité en second message, notamment les boucles, je t'invites à jeter un oeil à ce post : http://blogs.codes-sources.com/coq/archive/2007/07/28/un-bon-moyen-de-se-souvenir-de-l-ami-stringbuilder.aspx

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous