Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Extraire des champs XML d'un ntext (sql)...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraire des champs XML d'un ntext (sql)...

n°1529835
le_duc
PlaTyPuS
Posté le 17-03-2007 à 01:39:37  profilanswer
 

Hello!
 
Je fais un projet avec SQL 2005 et C# .... et dans la base sql 2005, j'ai des champs "ntext" ou il y a du texte de type XML, par exemple :
 

Code :
  1. <phones>
  2.      <phone type="Office">0434984782</phone>
  3.      <phone type="Home">485774792</phone>
  4. </phones>


 
Comment je peux faire pour récupérer les valeurs "Office" et "0434984782" ?
 
thx, +++

mood
Publicité
Posté le 17-03-2007 à 01:39:37  profilanswer
 

n°1529838
ionik
Posté le 17-03-2007 à 01:48:44  profilanswer
 

je dirai programme php

n°1529873
le_duc
PlaTyPuS
Posté le 17-03-2007 à 11:19:53  profilanswer
 

ionik a écrit :

je dirai programme php


 
 :lol: lol  :lol:  
 
j'vois pas le rapport!

n°1530037
le_duc
PlaTyPuS
Posté le 18-03-2007 à 07:18:58  profilanswer
 

bon, voilà comment j'ai fais :
 

Code :
  1. String s2 = "<PHONES>" +
  2.                                 "<PHONE  Type='Office'>026 294 38 29</PHONE>" +
  3.                                 "<PHONE  Type='House'>021 294 31 31</PHONE>" +
  4.                             "</PHONES>";
  5.                 XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(s2));
  6.                 /* STRING */
  7.                 while (reader.Read())
  8.                 {
  9.                     switch (reader.NodeType)
  10.                     {
  11.                         //case XmlNodeType.Element:
  12.                         //    string sNameElement = reader.Value;
  13.                         //    Console.WriteLine(sNameElement);
  14.                         //    break;
  15.                         //case XmlNodeType.EndElement:
  16.                         //    string sNameEndElement = reader.Value;
  17.                         //    Console.WriteLine(sNameEndElement);
  18.                         //    break;
  19.                         case XmlNodeType.Attribute:
  20.                             string sNameAttribute = reader.ReadString();
  21.                             Console.WriteLine(sNameAttribute);
  22.                             break;
  23.                         case XmlNodeType.Text:
  24.                             string sNameText = reader.Value;
  25.                             Console.WriteLine(sNameText);
  26.                             break;
  27.                         default:
  28.                             break;
  29.                     }
  30.                 }


 
++

n°1530038
0x90
Posté le 18-03-2007 à 07:22:30  profilanswer
 

du XML dans une base sql, yeay le mélange [:bien]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1533859
le_duc
PlaTyPuS
Posté le 26-03-2007 à 17:40:21  profilanswer
 

0x90 a écrit :

du XML dans une base sql, yeay le mélange [:bien]


 
pas trop à la page toi :D
 
c'est fini les années 50 hein  :lol:  
 
non sérieusement, c'est la classe l'utilisation du XML dans une BDD... ca permet d'avoir une BDD vachement souple et ou on peut tout de même faire des requetes complexes (je parle de sql 2005 là hein...)! Bon moi je stocke le XML dans un nText car je dois synchroniser une BDD sql 2005 et sql compact edition... et la compact edition ne gère pas le XML, donc voilà :(. Mais au moins ca me permettra de facilement me mettre à jour qd la version compact le supportera.

Message cité 1 fois
Message édité par le_duc le 26-03-2007 à 17:41:05
n°1533863
MagicBuzz
Posté le 26-03-2007 à 17:47:18  profilanswer
 

déjà, il y a un type "xml" dans SQL Server 2005.
Il est fait pour ça. A mon avis, ce sera plus simple.
 
Ensuite, il y a une documentation truffée d'exemples...

n°1533867
MagicBuzz
Posté le 26-03-2007 à 17:58:05  profilanswer
 

Déjà, ça ça marche :
 

Code :
  1. select id, cast([text] as xml).query('/element/val')
  2. from testxml


=> tu récupères sous la forme xml le contenu des éléments "val" de ton champ ntext (ici, il s'appelle "text" )
 
ensuite, faut trouver comment mettre le truc dans un filtre, j'y arrive pas, et la msdn rame trop. il est l'heure d'aller dodoer :o

n°1533868
MagicBuzz
Posté le 26-03-2007 à 18:00:40  profilanswer
 
n°1533891
MagicBuzz
Posté le 26-03-2007 à 20:01:29  profilanswer
 

Tout ce que je peux dire, c'est que c'est une merde infâme à utiliser mais bon...
 


CREATE TABLE [dbo].[testxml](
 [id] [numeric](18, 0) NOT NULL,
 [nom] [varchar](50) NOT NULL,
 [data] [xml] NOT NULL,
 CONSTRAINT [PK_testxml] PRIMARY KEY CLUSTERED  
(
 [id] ASC
))
go
 
insert into testxml (id, nom, data) values (1, 'toto', '<phones><phone type="mobile">0612345678</phone><phone type="home">0123456789</phone></phones><emails><email type="perso">toto@hotmail.com</email></emails>');
insert into testxml (id, nom, data) values (2, 'titi', '<phones><phone type="mobile">0687654321</phone></phones><emails><email type="perso">titi@hotmail.fr</email><email type="work">titi@worldcompagny.com</email></emails>');
insert into testxml (id, nom, data) values (3, 'tata', '<phones><phone type="home">0234567891</phone></phones><emails><email type="work">myoffice@hotmail.com</email></emails>');
insert into testxml (id, nom, data) values (4, 'tutu', '<phones><phone type="home">0345678912</phone></phones><emails><email type="perso">tutu@gmail.com</email></emails>');
 
-- Récupération des numéros de téléphone "home" des membres ayant une adresse perso chez Hotmail
select testxml.nom, tel.phone.value('.', 'varchar(10)'), cou.email.value('.', 'varchar(255)')
from testxml
outer apply testxml.data.nodes('/emails/email') as cou(email)
outer apply testxml.data.nodes('/phones/phone[@type="home"]') as tel(phone)
where cou.email.value('./@type', 'varchar(10)') = 'perso'
and cou.email.value('.', 'varchar(255)') like '%@hotmail.%'


 
Résultat :


nom                                                            
-------------------------------------------------- ---------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
toto                                               0123456789 toto@hotmail.com
titi                                               NULL       titi@hotmail.fr
 
(2 row(s) affected)

mood
Publicité
Posté le 26-03-2007 à 20:01:29  profilanswer
 

n°1536089
le_duc
PlaTyPuS
Posté le 29-03-2007 à 21:15:30  profilanswer
 

ouais mais comme je l'ai dit, je ne peux pas utiliser le type XML dans SQL 2005...car je synchronise cette base avec une base SQL Compact Edition qui elle ne supporte pas le type XML! Je suis donc obligé d'utiliser un type NTEXT....
 
Sinon pour le format XML, y'a LINQ qui va  bientôt sortir et qui sera vachement intéressant (plus spécifiquement XLINQ pour le xml!).

n°1536170
0x90
Posté le 30-03-2007 à 00:51:14  profilanswer
 

le_duc a écrit :

pas trop à la page toi :D
 
c'est fini les années 50 hein  :lol:  
 
non sérieusement, c'est la classe l'utilisation du XML dans une BDD... ca permet d'avoir une BDD vachement souple et ou on peut tout de même faire des requetes complexes (je parle de sql 2005 là hein...)! Bon moi je stocke le XML dans un nText car je dois synchroniser une BDD sql 2005 et sql compact edition... et la compact edition ne gère pas le XML, donc voilà :(. Mais au moins ca me permettra de facilement me mettre à jour qd la version compact le supportera.


 
Le modèle relationnel subsume le modèle arborescent de l'XML, je vois pas en quoi tasser du XML textuel dans une colonne est signe de modernité ou en quoi ça améliore la souplesse d'utilisation [:spamafote]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1536217
MagicBuzz
Posté le 30-03-2007 à 09:31:44  profilanswer
 

cast(monchamptextalacon as xml)
 
spa compliqué :spamafote:

n°1536222
MagicBuzz
Posté le 30-03-2007 à 09:36:02  profilanswer
 

0x90 a écrit :

Le modèle relationnel subsume le modèle arborescent de l'XML, je vois pas en quoi tasser du XML textuel dans une colonne est signe de modernité ou en quoi ça améliore la souplesse d'utilisation [:spamafote]


+100
 
c'est surtout le meilleurs moyen de goretiser son application, faire un truc impossible à maintenir, car non réfléchit à la base.

n°1536714
le_duc
PlaTyPuS
Posté le 31-03-2007 à 15:42:32  profilanswer
 

MagicBuzz a écrit :

+100
 
c'est surtout le meilleurs moyen de goretiser son application, faire un truc impossible à maintenir, car non réfléchit à la base.


 
bah tout dépend de l'utilisation!!!!
 
perso dans mon applic j'ai une table "Personne" et à l'intérieur de cette table, j'aurais bien fait des champs XML pour les les site Web de la personne et pour ses numéros de téléphones!!
 
Pasque pour gérer en relationnel plusieurs numéros de téléphone et sites web pour une personne (qui sont qd meme des renseignements de basse importance (enfin ca dépend de l'applic denouveau, masi dans mon cas en tout cas!), ca devient vite un modèle assez "lourd" pour pas grand chose!

n°1536717
le_duc
PlaTyPuS
Posté le 31-03-2007 à 15:47:34  profilanswer
 

MagicBuzz a écrit :

cast(monchamptextalacon as xml)
 
spa compliqué :spamafote:


 
ouais...le problème c'est qu'il faut que je regarde pour intégrer ca au services de synchronisation ADO.NET et comme aucune requete n'est faite sur ma base de donnée principale (sauf synchronisation des données), ca me faisait chier de chercher comment faire :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Extraire des champs XML d'un ntext (sql)...

 

Sujets relatifs
Récupération de la valeur d'un élément XML avec SAXCreation de projecteur, fscommand, XML et... Mac !!
Programmation pour extraire[RESOLU] [SQL] Utilisation de champs dans un case CASE
[PHP][XML] Afficher xml dans page phpFichier XML et typage de données
[xml&flash8] un bandeau panoramique en AS et XMLAttendre la fin du chargement d'un fichier XML
Ajax Probleme Open fichier XML IE7Compiler un ensemble de fichiers (XML + images)
Plus de sujets relatifs à : Extraire des champs XML d'un ntext (sql)...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR