écrire " dans un noeud avec MSXML, c'est possible ? [ DELPHI ] - Delphi/Pascal - Programmation
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
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
change de parser (moi je dois avoir une vieille beta de la 4).
Marsh Posté le 26-06-2002 à 07:41:52
oué, mais toi tu triches
Code :
|
je suis en MSXML3 SP2...
edit: encore un petit example avec les 2 valeurs dans 2 noeuds differents
Code :
|
Marsh Posté le 26-06-2002 à 08:50:11
JWhy a écrit a écrit : oué, mais toi tu triches |
tu m'étonnes ... 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
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 ?
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> |
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> |
le probleme est que lorsque je reecris le noeud BORDEL, ca me mets soit " (si j'ecris " ), soit &" (si j'ecris " )
Code :
|
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 )
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 "World"</TEST>
dans le xml resultant
et si je mets:
Hello "World"
j'obtiens:
<TEST>Hello "World"</TEST>
comment ca se fait ?!
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