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

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [ DELPHI ] écrire " dans un noeud avec MSXML, c'est possible ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ DELPHI ] écrire " dans un noeud avec MSXML, c'est possible ?

n°165116
JWhy
je peux plier (héhé)
Posté le 25-06-2002 à 00:21:23  profilanswer
 

je voudrais avoir ca comme resultat:

<TEST>Hello "World"</TEST>


 
Cependant, si j'ecris:

Hello "World"


j'obtiens:

<TEST>Hello &quot;World&quot;</TEST>


dans le xml resultant
 
et si je mets:

Hello "World"


j'obtiens:

<TEST>Hello "World"</TEST>


 
:??:
 
comment ca se fait ?!  :cry:  
 
 
 
voila le code de mon unité de test
[pascal]
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MSXML2_TLB, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  xmlDOM : IXMLDOMDocument;
  xmlNode : IXMLDOMNode;
begin
  xmlDOM := CoDOMDocument.Create;
  try
    xmlDOM.loadXML(memo1.text);
    xmlNode := xmlDOM.selectSingleNode(edit1.text);
    if xmlNode <> nil then
      xmlNode.text := Edit2.Text;
    memo1.text := xmlDOM.xml;
   finally
    xmlDOM := nil;
  end;
 
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  xmlDOM : IXMLDOMDocument;
  xmlNode : IXMLDOMNode;
begin
  xmlDOM := CoDOMDocument.Create;
  try
    xmlDOM.loadXML(memo1.text);
    xmlNode := xmlDOM.selectSingleNode(edit1.text);
    if xmlNode <> nil then
      Edit3.Text := xmlNode.text;
  finally
    xmlDOM := nil;
  end;
 
end;
 
end.
[/pascal]
memo1.text contient <TEST/>
edit1.text contient /TEST
edit2.text contient Hello "World"
edit3.text est vide


---------------
www.alliancefrancophone.org ... Home is where the heart is
mood
Publicité
Posté le 25-06-2002 à 00:21:23  profilanswer
 

n°165117
JWhy
je peux plier (héhé)
Posté le 25-06-2002 à 00:31:09  profilanswer
 

j'ai oublié qq explications:  
memo1 est le contenu XML
bouton1 permet d'ecrire edit2.text dans le noeud edit1.text
bouton2 permet de recuperer dans edit3.text la valeur du noeud edit1.text


Message édité par JWhy le 25-06-2002 à 00:31:27

---------------
www.alliancefrancophone.org ... Home is where the heart is
n°166010
JWhy
je peux plier (héhé)
Posté le 26-06-2002 à 04:45:21  profilanswer
 

UP matinal :bounce:

n°166012
youdontcar​e
Posté le 26-06-2002 à 06:11:35  profilanswer
 

petit test en js :
 
 <script>
  xmlDoc  = new ActiveXObject("Microsoft.XMLDOM" );
  xmlDoc.async = "false";
  xmlDoc.load("test.xml" );
  test = xmlDoc.selectSingleNode("test" );
  test.text = 'Hello "World"';
  alert(test.text);
 </script>
 
à l'alert(), j'obtiens  
 
  Hello "World"
 
et avec  
 
  test.text = 'Hello "World"';
 
j'obtiens
 
  Hello "World"
 
donc tout a l'air ok ...
 
par contre la première fois que j'ai testé Hello "... j'ai obtenu comme toi Hello &"...
 
j'ai été très surpris :D
 
change de parser :D (moi je dois avoir une vieille beta de la 4).

n°166013
JWhy
je peux plier (héhé)
Posté le 26-06-2002 à 07:41:52  profilanswer
 

oué, mais toi tu triches ;)
 

Code :
  1. <script>
  2.   xmlDoc  = new ActiveXObject("Microsoft.XMLDOM" );
  3. xmlDoc.async = "false";
  4. xmlDoc.loadXML("<test/>" );
  5. test = xmlDoc.selectSingleNode("test" );
  6. test.text = 'Hello "World"';
  7. alert(test.xml);  // <--  c'est le XML résultant qui m'interesse, pas le .text du node :(
  8. </script>


 
je suis en MSXML3 SP2...
 
 
edit: encore un petit example avec les 2 valeurs dans 2 noeuds differents

Code :
  1. <script>
  2. xmlDoc  = new ActiveXObject("Microsoft.XMLDOM" );
  3. xmlDoc.async = "false";
  4. xmlDoc.loadXML("<tests>\n\t<test1/>\n\t<test2/>\n</tests>" );
  5. test = xmlDoc.selectSingleNode("/tests/test1" );
  6. test.text = 'Hello "World"';
  7. test = xmlDoc.selectSingleNode("/tests/test2" );
  8. test.text = 'Hello "World"';
  9. alert(xmlDoc.xml); // <-- pareil, affichage du xml complet
  10. </script>


Message édité par JWhy le 26-06-2002 à 07:50:17
n°166023
youdontcar​e
Posté le 26-06-2002 à 08:50:11  profilanswer
 

JWhy a écrit a écrit :

oué, mais toi tu triches ;)


tu m'étonnes :D ... en fait je racontais n'importe quoi quand je disais que ça buggait puis que ça marchait ... j'ai d'abord affiché .xml puis .text :lol:
 
http://list.alicebot.org/pipermail [...] 00402.html éclaire un peu ma lanterne sur le sujet. par design, le parser permet de mettre n'importe quoi dans ta node texte. une string comme "& < >" est donc encodée comme "& < >". logique. ce qui permet au xml de rester valide, sans avoir à générer une erreur comme "vous devez m'encoder tout ça, merci".
 
je ne m'explique toujours pas la nécessité d'encoder le ", à part le fait que c'est plus simple de coder un machin bourrin qui remplace tout.
 
bref si tu veux afficher des guillemets, mets des guillemets, pas ". tu veux faire quoi en fait ?

n°166653
JWhy
je peux plier (héhé)
Posté le 26-06-2002 à 17:38:42  profilanswer
 

pareil que toi, en fait c'est le comportement "normal": http://www.w3.org/TR/REC-xml#syntax
 
parcequ'en fait, on me file un fichier XML comportant un noeud "data en vrac" (qui n'est pas un CDATA :( ) que je dois lire et modifier ..
par exemple, en entrée je vais avoir:

<DATA>
<NOM>TOTO</NOM>
<BORDEL>
Prenom="Tutu"
CodePostal=75000
</BORDEL>
</DATA>


 
qui est un XML valide (meme si pas super propre) et si je recupere bien
Prenom="Tutu"
CodePostal=75000
 
je fais mes modifs, j'ajoute des trucs et j'essaye de reecrire:
Prenom="Tutu"
CodePostal=75000
Ville="Paris"
 
et il faudrait que ca apparaisse comme ce que j'avais au debut + mes modifications: c-a-d
 

<DATA>
<NOM>TOTO</NOM>
<BORDEL>
Prenom="Tutu"
CodePostal=75000
Ville="Paris"
</BORDEL>
</DATA>


 
le probleme est que lorsque je reecris le noeud BORDEL, ca me mets soit " (si j'ecris " ),  soit &" (si j'ecris " ) :(
 
 
 

Code :
  1. <script>
  2.   xmlDoc  = new ActiveXObject("Microsoft.XMLDOM" );
  3.   xmlDoc.async = "false";
  4.   xmlDoc.loadXML("<DATA><NOM>TOTO</NOM>\n<BORDEL>Prenom="Tutu"\nCodePostal=75000</BORDEL></DATA>" );
  5.   test = xmlDoc.selectSingleNode("//BORDEL" );
  6. //  test.text = test.text + '\nVille="Paris"';
  7.   test.text = test.text + '\nVille="Paris"';
  8.   alert(test.xml + "\n-----\n"+ test.text);
  9. </script>


 
 
 
et non, je peux pas demander qu'on m'envoit un xml avec des "  ou autres...
(par contre, je suis en train de demander si ca fait vraiment chier si j'ecris un " dans le XML resultant :D )


Message édité par JWhy le 26-06-2002 à 17:40:12

---------------
www.alliancefrancophone.org ... Home is where the heart is

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [ DELPHI ] écrire &quot; dans un noeud avec MSXML, c'est possible ?

 

Sujets relatifs
[Delphi] ShowMainForm ???!!![delphi] Comment livrer un executable..
[Delphi] Detruire une Form ![delphi] évènement de clic ...
Comment attaqué une base de donnée Access (*mdb) sous Delphiimprimer une stringlist en delphi
[delphi] Je souhaite ecrire des caractere sur le port serie ...[Delphi] Fermer une application ouverte avec delphi [résolu]
debutant en delphi recherche une aide !! 
Plus de sujets relatifs à : [ DELPHI ] écrire &quot; dans un noeud avec MSXML, c'est possible ?


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