FAQ XMLRADConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 55, dernière mise à jour : 26 octobre 2006
La méthode XMLCursor.Select(XPath) sélectionne un noeud fils du XMLCursor courrant et retourne une nouvelle référence (un nouvel XMLCursor) sur ce noeud.
Si le noeud n'existe pas, la propriété EOF de XMLCursor est égal à True.
Soit le document XML OutputDoc suivant:
<
document
>
<
PARAMS
>
<
Message
>
Helloworld !<
/
Message
>
<
/
PARAMS
>
<
/
document
>
Nous avons le code suivant:
var
Cursor: IXMLCursor;
Child1, Child2, Child3: IXMLCursor;
begin
Cursor := OutputDoc.Select('
/document
'
); //
Cursor.EOF
=
False,
/document
XPath
existe
dans
le
XMLCursor
OutputDoc.
Child1 := Cursor.Select('
PARAMS
'
); //
Child.EOF
=
False,
PARAMS
est
un
fils
de
l'élément
document,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
Child2 := Cursor.Select('
PARAMS/Message
'
); //
Child.EOF
=
False,
PARAMS/Message
est
un
XPath
existant,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
Child3 := Cursor.Select('
PARAMS/FakeNode
'
); //
Child3.EOF
=
True.
FakeNode
n'existe
pas.
end
;
{
Cursor =
OutputDoc.
Select
("
/document
"
);
//
Cursor.EOF()
=
False,
/document
XPath
existe
dans
le
XMLCursor
OutputDoc.
Child1 =
Cursor.
Select
("
PARAMS
"
);
//
Child.EOF()
=
False,
PARAMS
est
un
fils
de
l'élément
document,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
Child2 =
Cursor.
Select
("
PARAMS/Message
"
);
//
Child.EOF()
=
False,
PARAMS/Message
est
un
XPath
existant,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
Child3 =
Cursor.
Select
("
PARAMS/FakeNode
"
);
//
Child3.EOF()
=
True.
FakeNode
n'existe
pas.
}
{
IXMLCursor Cursor =
OutputDoc.
Select
("
/document
"
);
//
Cursor.EOF()
=
False,
/document
XPath
existe
dans
le
XMLCursor
OutputDoc.
IXMLCursor Child1 =
Cursor.
Select
("
PARAMS
"
);
//
Child.EOF()
=
False,
PARAMS
est
un
fils
de
l'élément
document,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
IXMLCursor Child2 =
Cursor.
Select
("
PARAMS/Message
"
);
//
Child.EOF()
=
False,
PARAMS/Message
est
un
XPath
existant,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
IXMLCursor Child3 =
Cursor.
Select
("
PARAMS/FakeNode
"
);
//
Child3.EOF()
=
True.
FakeNode
n'existe
pas.
}
{
XMLCursor Cursor =
OutputDoc.select
("
/document
"
); //
Cursor.EOF()
=
False,
/document
XPath
existe
dans
le
XMLCursor
OutputDoc.
XMLCursor Child1 =
Cursor.select
("
PARAMS
"
); //
Child.EOF()
=
False,
PARAMS
est
un
fils
de
l'élément
document,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
XMLCursor Child2 =
Cursor.select
("
PARAMS/Message
"
); //
Child.EOF()
=
False,
PARAMS/Message
est
un
XPath
existant,
donc
Select()
retourne
une
nouvelle
référence
sur
ce
noeud
existant.
XMLCursor Child3 =
Cursor.select
("
PARAMS/FakeNode
"
); //
Child3.EOF()
=
True.
FakeNode
n'existe
pas.
}
Autre morceau de code:
var
Params: IXMLCursor;
begin
Params := OutputDoc.Select('
/document/PARAMS
'
); //
Essaye
de
récupérer
une
référence
sur
le
noeud
PARAMS
if
Params.EOF then
//
Si
le
noeud
PARAMS
n'est
pas
trouvé
Params := OutputDoc.AppendChild('
PARAMS
'
, '
'
); //
alors
nous
l'ajoutons
en
utilisant
la
méthode
AppendChild
Params.SetValue('
Message
'
, '
Helloworld
!
'
); //
Enfin,
nous
pouvons
travailler
sur
le
XMLCursor
Params
pour
mettre
de
nouvelles
valeurs
end
;
{
Params =
OutputDoc.
Select
("
/document/PARAMS
"
);
//
Essaye
de
récupérer
une
référence
sur
le
noeud
PARAMS
if
(Params.
EOF
()) //
Si
le
noeud
PARAMS
n'est
pas
trouvé
Params =
OutputDoc.
AppendChild
("
PARAMS
"
,
"
"
);
//
alors
nous
l'ajoutons
en
utilisant
la
méthode
AppendChild
Params.
SetValue
("
Message
"
,
"
Helloworld
!
"
);
//
Enfin,
nous
pouvons
travailler
sur
le
XMLCursor
Params
pour
mettre
de
nouvelles
valeurs
}
{
IXMLCursor Params =
OutputDoc.
Select
("
/document/PARAMS
"
);
//
Essaye
de
récupérer
une
référence
sur
le
noeud
PARAMS
if
(Params.
EOF
()) //
Si
le
noeud
PARAMS
n'est
pas
trouvé
Params =
OutputDoc.
AppendChild
("
PARAMS
"
,
"
"
);
//
alors
nous
l'ajoutons
en
utilisant
la
méthode
AppendChild
Params.
SetValue
("
Message
"
,
"
Helloworld
!
"
);
//
Enfin,
nous
pouvons
travailler
sur
le
XMLCursor
Params
pour
mettre
de
nouvelles
valeurs
}
{
XMLCursor Params =
OutputDoc.select
("
/document/PARAMS
"
); //
Essaye
de
récupérer
une
référence
sur
le
noeud
PARAMS
if
(Params.eof
()) //
Si
le
noeud
PARAMS
n'est
pas
trouvé
Params =
OutputDoc.appendChild
("
PARAMS
"
, "
"
); //
alors
nous
l'ajoutons
en
utilisant
la
méthode
AppendChild
Params.setValue
("
Message
"
, "
Helloworld
!
"
); //
Enfin,
nous
pouvons
travailler
sur
le
XMLCursor
Params
pour
mettre
de
nouvelles
valeurs
}
Si vous créez une nouveau document XML en utilisant XMLCursor, vous pouvez utilisez la méthode XMLCursor.LoadXML pour fournir un squelette du document XML au parser.
var
XMLCursor: IXMLCursor;
begin
XMLCursor := XMLCollection.CreateXMLCursor;
XMLCursor.LoadXML('
<?xml
version="1.0"
encoding="ISO-8859-15"?>
'
#
13
#
10
'
<document
/>
'
);
//
...
XMLCursor.Save(FileName);
end
;
{
XMLCursor =
XMLCollection.
CreateXMLCursor
();
XMLCursor.
LoadXML
("
<?xml
version=
"
1
.
0
"
encoding=
"
ISO-
8859
-
15
"
?>\\\\n<document
/>
"
);
//
...
XMLCursor.
Save
(FileName);
}
{
IXMLCursor XMLCursor;
XMLCursor =
XMLCollection.
CreateXMLCursor
();
XMLCursor.
LoadXML
("
<?xml
version=
"
1
.
0
"
encoding=
"
ISO-
8859
-
15
"
?>\\\\n<document
/>
"
);
//
...
XMLCursor.
Save
(FileName);
}
{
XMLCursor XMLCursor;
XMLCursor =
xmlCollection.createXMLCursor
();
XMLCursor.loadXML
("
<?xml
version=
"
1
.0
"
encoding=
"
ISO-
8859
-
15
"
?>\\\\n<document
/>
"
);
//
...
XMLCursor.save
(FileName);
}
Si vous travaillez avec un fichier existant, chargez-le en tant que String avec ReadFileToString et remplacez l'encoding courrant en utilisant TranslateStrToStr.
var
FileContent: WideString;
begin
ReadStringFromFile(FilePath, FileContent);
TranslateStrToStr(FileContent, '
UTF-8
'
, '
ISO-8859-15
'
);
WriteStringToFile(FileContent, FilePath);
end
;