xml parsing - ¿Cómo cargo un archivo XML y lo analizo usando Haxe
xml-parsing nme (2)
Intento crear una aplicación de escritorio que cargue el archivo xml de la lista de reproducción de itunes y analizarlo con Haxe y framework haxenme.
Creo que el problema que estoy teniendo puede ser que los espacios en el nombre del archivo no se hayan escapado correctamente, pero no estoy 100% seguro de esto.
Aquí está el código que tengo hasta ahora.
package com.mattwallace.appname.actions;
import nme.Assets;
import haxe.xml.Fast;
class GetPlayListAction
{
public function new():Void
{
super();
}
public function execute():Void
{
var xml:Xml = Xml.parse(getXMLDesktopString());
trace(xml);
}
private function getXMLDesktopString():String
{
var xmlString:String = sys.io.File.getContent(
nme.filesystem.File.userDirectory.url +
"/Music/iTunes/iTunes Music Library.xml");
return xmlString;
}
}
Bueno, parece que tan pronto como publico siempre encuentro la respuesta. El problema era "File.userDirectory.url" Necesitaba usar "File.userDirectory.nativePath"
Aquí hay un código actualizado que me solucionó el problema.
class GetPlayListAction
{
public function new():Void
{
}
public function execute():Void
{
var xml:Xml = Xml.parse(getXMLDesktopString());
trace(xml);
}
private function getXMLDesktopString():String
{
var nativeUserDir:String = nme.filesystem.File.userDirectory.nativePath;
var filePath:String = "/Music/iTunes/iTunes Music Library.xml";
var fullPath = nativeUserDir + filePath;
var xmlString:String = sys.io.File.getContent(fullPath);
return xmlString;
}
}
import haxe.Http;
import haxe.xml.Fast;
class XmlParsRead {
function new() {
//asynchronous call
var resource_url = new haxe.Http("http://localhost:96/SCO1.2/imsmanifest.xml");
// onData event method will catch the response data if request is success
resource_url.onData = function(resource_url) {
var xml = Xml.parse(resource_url);
// to see the xml file
//trace(xml);
// enter into xml file 1st element
var xmlReadFirstElement = new Fast(xml.firstElement());
// see the element name
trace(xmlReadFirstElement.name);
// I want to go resources tag "''node'' is predefine attribute it reprasent node(tag<some>) in xml file "
var resesNode = xmlReadFirstElement.node.resources;
// name is predefined attribute to see the tag name
trace(resesNode.name);
// I want to go resource(it is sub of resources tag )
var res = resesNode.node.resource;
// to see the resource tag name
trace(res.name);
// I''ve to read href attribute in <resource>tag i.e -<resource identifier="SCO_RES" adlcp:scormtype="sco" href="some.htm" type="webcontent"> ..</resource>
var res_href = res.att.href;
trace(res_href);
// next read the list of sub tags( <file>) resource tag using loop
// RES(res) is point the resource tag and NODES(nodes) is predefine attributes we can use to iterate list of sub tags or sub nodes
for (subtaghref in res.nodes.file) {
//<file href="some.htm"/>
trace(subtaghref.att.href);
}
}
// making the asynchronous request
resource_url.request(false);
}
public static function main() {
new XmlParsRead();
}
}