Programmation Haxe/Haxe.xml
Apparence
- Exemple 1 : avec haxe.xml.Fast qui regroupe des fonctions éclaires
// contenu xml
var xml = Xml.parse("
<user name='john'>
<phone>
<number>0000</number>
<number>111</number>
</phone>
</user>
");
// encapsuler le xml pour un accès fast
var fast = new haxe.xml.Fast(xml.firstElement());
// accéder les attributs
trace(fast.att.name); // attribute "name"
if( fast.has.age ) trace( fast.att.age ); // optional attribute
// accession de l'enfant de phone
var phone = fast.node.phone;
// boucle pour affichage
for( p in phone.nodes.number ) {
trace(p.innerData);
}
ou Exemple 2 : utilisant des propriétés de Xml (à la racine de l'api :)
// le xml
var str = "<hello where=\"world\">Haxe</hello>";
// on parse le xml
var x : Xml = Xml.parse(str).firstElement();
// on fait une requète
var out = x.nodeName + " " + x.get("where")+" "+x.firstChild().nodeValue;
trace(out);
for( child in x ) {
// itère tous les enfants
trace(child);
}
for( elt in x.elements() ) {
// itère tous les éléments
trace(elt);
}
for( user in x.elementsNamed("user") ) {
// itère tous les éléments avec le nodeName "user"
trace(user);
}
for( att in x.attributes() ) {
// itérateur sur tous les attributs
trace(att);
}
Attaque namespace : Xml (racine-haxe3)
// on met le string xml dans une variable
var str = "<hello where=\"world\">Haxe</hello>";
// on parse le xml -- et on prends le premier élément -- .firstElement() est dans le namespace Xml
var x : Xml = Xml.parse(str).firstElement();
Fields
nodeName
var out = x.nodeName;
// retourne -> "hello"
nodeType
var out = x.nodeType;
// retourne -> "element" -- car hello est de type element xml
nodeValue
var out = x.firstChild().nodeValue;
// retourne -> "Haxe"
parent
var out = x.firstChild().parent;
// retourne -> le noeud "hello" comme parent car il n'y a pas de noeud parent
Methods
addChild
En partant de l'exemple 2
var el : Xml = Xml.createElement('tmp');
el.addChild(Xml.createCData("content"));
x.addChild(el);
// on utilise la librairie fast -> on verra cela plus tard
var fast = new haxe.xml.Fast(x);
trace(fast.innerHTML);
// retourne -> "ClaTest.hx:22: Haxe<tmp><![CDATA[content]]></tmp>"
attributes
En partant de l'exemple 2
trace(x.attributes());
// retourne -> Main.hx:18: { next => #function:0, a => [where], p => 0, hasNext => #function:0 }
elements
package ;
class Main
{
static public function main()
{
var str = "<hello where=\"world\">Haxe<el>content_1</el><el>content_2</el></hello>";
// on parse le xml
var x : Xml = Xml.parse(str);
for (child in x.firstChild().elements())
{
trace(child.firstChild().nodeValue);
//
}
// retourne -> Main.hx:19: content_1
// Main.hx:19: content_2
}
}
elementsNamed
package ;
class Main
{
static public function main()
{
var str = "<hello where=\"world\">Haxe<el>content_1</el><el>content_2</el></hello>";
// on parse le xml
var x : Xml = Xml.parse(str);
for (child in x.firstChild().elements())
{
trace(child.firstChild().nodeValue);
//
}
// retourne -> Main.hx:19: content_1
// Main.hx:19: content_2
}
}
exists
avec le xml précédent
trace(x.firstChild().exists("where"));
// retourne -> Main.hx:20: true
firstChild
avec le xml de elementsNamed
trace(x.firstChild().nodeName);
// retourne -> Main.hx:20: hello
firstElement
avec le xml de elementsNamed
trace(x.firstChild().firstElement().nodeName);
// retourne -> Main.hx:20: el
get
avec le xml de elementsNamed
trace(x.firstChild().get("where"));
// retourne -> Main.hx:20: world
insertChild
avec le xml de elementsNamed
x.firstChild().insertChild(x.firstChild().elementsNamed("pl").next(),1);
trace(x.firstChild().toString());
// retourne -> Main.hx:21: <hello where="world">
// <pl>content of pl</pl><el>content_1</el><el>content_2</el>
//
// </hello>
iterator
package ;
class Main
{
static public function main()
{
var str = "<hello where=\"world\">
<el>content_1
<sl>one</sl>
<sl>two</sl>
</el><el>content_2</el>
<pl>content of pl</pl>
</hello>";
// on parse le xml
var x : Xml = Xml.parse(str);
var it = x.firstElement().firstElement().iterator();
for (child in it)
{
trace(child.nodeType);
}
// retourne -> Main.hx:26: pcdata <-- text avant premier sl
// Main.hx:26: element <-- premier sl
// Main.hx:26: pcdata <-- text avant deuxième sl
// Main.hx:26: element <-- deuxième sl
// Main.hx:26: pcdata <-- text après deuxième sl
}
}
remove
avec le xml de elementsNamed
x.firstElement().remove("where");
trace(x.firstChild().toString());
// retourne -> Main.hx:21: <hello>
// <el>content_1</el><el>content_2</el>
// <pl>content of pl</pl>
// </hello>
on voit que l'attribut where a disparu :)
removeChild
avec le xml de elementsNamed
x.firstChild().removeChild(x.firstChild().elementsNamed("pl").next());
trace(x.firstChild().toString());
// retourne -> Main.hx:21: <hello where="world">
// <el>content_1</el><el>content_2</el>
//
// </hello>
set
avec le xml de elementsNamed
x.firstChild().set("where","newValue");
trace(x.firstChild().get("where"));
// retourne -> Main.hx:21: newValue
toString
avec le xml de elementsNamed
trace(x.firstChild().toString());
// retourne -> Main.hx:20: <hello where="world">
// <el>content_1</el><el>content_2</el>
// <pl>content of pl</pl>
// </hello>