Programmation Haxe/Haxe.xml

Un livre de Wikilivres.
Aller à : navigation, rechercher
  • 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)[modifier | modifier le wikicode]

// 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[modifier | modifier le wikicode]

nodeName[modifier | modifier le wikicode]

var out = x.nodeName;
// retourne -  "hello"

nodeType[modifier | modifier le wikicode]

var out = x.nodeType;
// retourne -  "element" -- car hello est de type element xml

nodeValue[modifier | modifier le wikicode]

var out = x.firstChild().nodeValue;
// retourne -  "Haxe"

parent[modifier | modifier le wikicode]

var out = x.firstChild().parent;
// retourne -  le noeud "hello" comme parent car il n'y a pas de noeud parent

Methods[modifier | modifier le wikicode]

addChild[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

En partant de l'exemple 2

trace(x.attributes());
// retourne -  Main.hx:18: { next =  #function:0, a =  [where], p =  0, hasNext =  #function:0 }

elements[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

avec le xml précédent

trace(x.firstChild().exists("where"));
// retourne -  	Main.hx:20: true

firstChild[modifier | modifier le wikicode]

avec le xml de elementsNamed

trace(x.firstChild().nodeName);
// retourne -  	Main.hx:20: hello

firstElement[modifier | modifier le wikicode]

avec le xml de elementsNamed

trace(x.firstChild().firstElement().nodeName);
// retourne -  	Main.hx:20: el

get[modifier | modifier le wikicode]

avec le xml de elementsNamed

trace(x.firstChild().get("where"));
// retourne -  	Main.hx:20: world

insertChild[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

avec le xml de elementsNamed

x.firstChild().set("where","newValue"); 
trace(x.firstChild().get("where"));
// retourne -  	Main.hx:21: newValue

toString[modifier | modifier le wikicode]

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