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

MS SQL Server Discussion :

modification d'un balise xml


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut modification d'un balise xml
    bonjour a tous , j ai une table avec un colonne [cc_content] de type xml. J'aurai besoin de modifier la balise principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <cc:thresholdCategory  key="K1390997942015" seq="2" version="7">
      <cc:name>
        <cc:Property language="fr">
          <cc:PropertyValue>???</cc:PropertyValue>
        </cc:Property>
        <cc:Property language="en">
          <cc:PropertyValue>Weight</cc:PropertyValue>
        </cc:Property>
      </cc:name>
      <cc:description>
        <cc:Property language="fr">
          <cc:PropertyValue>???</cc:PropertyValue>
        </cc:Property>
        <cc:Property language="en">
          <cc:PropertyValue>Body Weight</cc:PropertyValue>
        </cc:Property>
      </cc:description>
    </cc:thresholdCategory>
    donc changer thresholdCategory par threshold
    et mon code sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update [cc_threshold] set
        [cc_content] = cast(
            replace(
              cast([cc_content] as nvarchar(max)),        '<cc:thresholdCategory>', '<cc:threshold>'
            )
        as xml)
    resultat (3138 row(s) affected)

    mais rien n est jamais
    alors ou est le probleme
    si une personne peut m'aider merci d avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 774
    Points : 52 746
    Points
    52 746
    Billets dans le blog
    5
    Par défaut
    XML, c'est pas du texte, c'est du XML...
    Or vous utilisez des fonctions texte. C'est un peu comme si vous utilisiez des fonctions de traitement de chaine de caractères sur des nombres !

    Pour modifier une balise XML, il faut utiliser les outils XML : XQuery et XPath, alié à la methode modify. http://technet.microsoft.com/en-us/l.../ms190675.aspx
    Dans ce cas particulier (remplacement de balise), faites d'abord un insert puis un delete.
    Le tout dans une transaction...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Points : 74
    Points
    74
    Par défaut
    bonjour M.SQLPRO alors voila ou j'en suis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    UPDATE [cc_threshold]
    set [cc_content].modify('declare namespace cc="http://......";
      insert attribute cc:threshold{}
      as first
      into   (/cc:thresholdCategory)[1]
    ')
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <cc:thresholdCategory key="K1390997942015" seq="2" version="7" cc:threshold="">
      
      <cc:name>
        <cc:Property language="fr">
          <cc:PropertyValue>???</cc:PropertyValue>
        </cc:Property>
        <cc:Property language="en">
          <cc:PropertyValue>Weight</cc:PropertyValue>
        </cc:Property>
      </cc:name>
      <cc:description>
        <cc:Property language="fr">
          <cc:PropertyValue>???</cc:PropertyValue>
        </cc:Property>
        <cc:Property language="en">
          <cc:PropertyValue>Body Weight</cc:PropertyValue>
        </cc:Property>
      </cc:description>
    </cc:thresholdCategory>
    je vois bien l'attribut mais est la fin donc ca m'arrange pas trop
    De plus si je fais un delete ma ligne au complet sera delete avec ses valeurs . Encore la j'aurais un plus gros problème .
    et comment remplacer </cc:thresholdCategory> a la toute fin
    bref pas sur de bien vous avec compris.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Votre requête initiale ne remplace rien, puisqu'elle ne trouve pas le texte cherché, lequel n'existe pas : '<cc:thresholdCategory>'

    Sur le même esprit, il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UPDATE cc_threshold
    SET		cc_content = CAST(
    					REPLACE(
    						CAST(cc_content AS NVARCHAR(MAX)),
    						'thresholdCategory',
    						'threshold'
    						)
    					AS xml
    				)

    Pour rester en traitement XML, vous pouvez néanmoins le faire en une fois, mais il faut connaitre les attributs de la balise à renommer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE cc_threshold
    	SET	cc_content = cc_content.query('
    		declare namespace cc="http://......"; 
    		<cc:threshold key="{data(/cc:thresholdCategory[1]/@key)}" seq ="{data(/cc:thresholdCategory[1]/@seq)}" version="{data(/cc:thresholdCategory[1]/@version)}">
    			{(cc:thresholdCategory/*)}
    		</cc:threshold>')

Discussions similaires

  1. Modification d'un élement dans une balise XML
    Par Krash66 dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2009, 23h37
  2. [XML] string et balise XML <??>
    Par Royd938 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/10/2005, 16h51
  3. [Configuration] Confusion de balises XML / PHP
    Par teto dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 10/09/2005, 13h40
  4. [JDOM] données un attribut à une balise xml
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 09/07/2004, 15h54
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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