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

écrire " dans un noeud avec MSXML, c'est possible ? [ DELPHI ] - Delphi/Pascal - Programmation

Marsh Posté le 25-06-2002 à 00:21:23    

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
Reply

Marsh Posté le 25-06-2002 à 00:21:23   

Reply

Marsh Posté le 25-06-2002 à 00:31:09    

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
Reply

Marsh Posté le 26-06-2002 à 04:45:21    

UP matinal :bounce:

Reply

Marsh Posté le 26-06-2002 à 06:11:35    

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).

Reply

Marsh Posté le 26-06-2002 à 07:41:52    

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
Reply

Marsh Posté le 26-06-2002 à 08:50:11    

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 ?

Reply

Marsh Posté le 26-06-2002 à 17:38:42    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed