
FAQ XMLRADConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 55, dernière mise à jour : 26 octobre 2006
Sommaire→Framework XMLCLX→XMLCursorLa 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;



