2016-05-30 59 views
2

我需要通过它的XPath获取一些XML节点,我该怎么做呢?Haxe和XPath有友谊吗?

我试图用这个库https://github.com/djcsdy/haxe-xpath,但蹊跷的https://github.com/djcsdy/haxe-xpath/issues/26

和我的任务XML快速不好的解决方案,因为它看起来比XPath的“稍差”,我认为:

JS(xpath的):

xml_doc.get('//project/classpaths/class[@path="' + src_path + '"]') 

haXe的(XML快速):

(new Fast(xml_doc))).node.project.node.classpaths.nodes.class.filter(function (x:Fast) return x.has.path ? x.att.path == src_path : false) 

谢谢

+0

用于文库 “haXe的-的xpath” 被做一些小的修正https://github.com/djcsdy/haxe-xpath/issues/26 –

回答

2

因为结果发现两个库,都需要一些修复。

"Haxe XPath"

它只能如果使用克隆目录 “haXe的-的XPath/src目录/ XPath的” 到你的来源(haxelib回购不包含此库)。需要

一些修补此库:thisthis

例如(删除第一发现元素):

package; 

import xpath.XPathHx; 
using Lambda; 

class Main { 
    public static function main() { 
     var xml = Xml.parse("<a> <b> <c>qwe</c> <c>asd</c> </b> </a>"); 
     trace(xml.toString()); 

     var xpExpr = new XPathHx("//a/b/c"); // create new XPath expression object 
     var result = xpExpr.selectNodes(xml).array()[0]; // get first element from array of founded xml-nodes 

     result.parent.removeChild(result); // remove selected node from xml-tree 
     trace(xml.toString()); 
    } 
} 

2."xmlTools"

它可以用haxelib安装:

haxelib install xmlTools 
haxelib install composure 

Some fix was needed for this library (in my task)和一个nuance for xpath

例如(删除第一发现元素):

package; 

import xmlTools.XPath; 
using Lambda; 

class Main { 
    public static function main() { 
     var xml = Xml.parse("<a> <b> <c>qwe</c> <c>asd</c> </b> </a>"); 
     trace(xml.toString()); 

     var xpath = new XPath(); // create new XPath expression object 
     var result = xpath.resolve(xml, "*/a/b/c").array()[0]; // get first element from array of founded xml-nodes 

     result.parent.removeChild(result); // remove selected node from xml-tree   
     trace(xml.toString()); 
    } 
}