2014-01-30 2 views
1

riak에 많은 XML 문서를 저장 한 다음 MapReduce를 사용하여 쿼리를 수행하려는 경우 어떻게 맵핑에서 XPath를 사용할 수 있습니까?XML 데이터에 riak MapReduce를 사용할 수 있습니까

예제는 JSON을 보여

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

하지만이 같은 싶지 :

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

하면이 가능한가, 또는의 JSON 중복 복사본을 만드는 것보다 다른 해결 방법은 (이 내 XML 객체)?

답변

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 쿼리는 노드 목록 대신 스칼라 값을 반환 할 수 있으므로 반환 값을 목록에 포함하거나 그렇지 않은 경우 쿼리 결과와 연결하여 목록에 래핑 할 수 있습니다 (예 : get 버켓/객체로부터의 키).

+0

대단히 감사합니다. 내 옵션은 다음과 같습니다. a) Erlang을 능숙하게 사용하거나, b) XML 버킷 항목에 대한 링크가있는 조회 용 별도의 버킷을 사용합니다 (JSON 보유). – Tim

관련 문제