是否可以在XML数据上使用riak MapReduce

时间:2014-01-30 22:38:03

标签: xml xpath mapreduce riak

如果我在riak中存储了大量XML文档,然后想使用MapReduce查询它,我如何在map函数中使用XPath?

示例显示JSON:

var data = JSON.parse(v.values[0].data);

但我想做点什么:

var data = XML.selectNode("/root/XPath/to/my/node");

这是可能的,还是有解决方法(除了创建我的XML对象的JSON副本之外)?

1 个答案:

答案 0 :(得分:1)

Riak的JS虚拟机本身不支持XML,但Erlang功能通过标准库的“xmerl”应用程序完成。

map_xpath(Object, _KeyData, XPath) ->
    %% Get the value out of the riak object
    {ok, Body} = riak_object:get_value(Object),
    %% Parse the XML contents into data structures
    {Doc, _} = xmerl_scan:string(unicode:characters_to_list(Body)),
    %% Extract the fragment via XPath
    xmerl_xpath:string(XPath, Doc).

这非常通用,你可能想要更具体的东西。由于XPath查询在某些情况下可以返回标量值而不是节点列表,因此可能希望将返回值包装在列表中,或者将某些内容与查询结果相关联并将其包装在列表中(例如,获取关闭对象的桶/键。)

相关问题