Aller au contenu

Programmation Haxe/Haxe.xml

Un livre de Wikilivres.
  • 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();
var out = x.nodeName;
// retourne -> "hello"
var out = x.nodeType;
// retourne -> "element" -- car hello est de type élément xml
var out = x.firstChild().nodeValue;
// retourne -> "Haxe"
var out = x.firstChild().parent;
// retourne -> le nœud "hello" comme parent car il n'y a pas de nœud parent

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>"

En partant de l'exemple 2

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

avec le XML précédent

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

avec le XML de elementsNamed

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

avec le XML de elementsNamed

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

avec le XML de elementsNamed

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

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>
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
	}
}

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 :)

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>

avec le XML de elementsNamed

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

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>