2016-05-25 13 views
0
in XML

ich mehrreihige Ergebnis von mysql select in erlang haben:erlang mysql mehrreihige Ergebnis

{_,_, Result} = ejabberd_odbc:sql_query(Server, 
          [<<"select group, GROUP_CONCAT(members.username separator ', ') AS member from members WHERE id='">>,Id,<<"'">>]), 

Ergebnis = [{ "Gruppe", "username1, username2, Username3 ......." } .... { "Gruppe", "username1, username2, Username3 ......."}]

wollen Ergebnisse zu xML-Element konvertieren:

xml = <group "xxxxxx"> 
      <members> 
       <member> 
        <username>xxxxxx</username> 
       </member> 
       <member> 
        <username>xxxxxx</username> 
       </member> 
       <member> 
        ......... 
       </member> 
      </members> 
     </group> 
     ........ 
     <group "xxxxxx"> 
      <members> 
       <member> 
        <username>xxxxxx</username> 
       </member> 
       <member> 
        <username>xxxxxx</username> 
       </member> 
       <member> 
        ......... 
       </member> 
      </members> 
     </group> 

eine einfache Möglichkeit zu platzieren es in xmpp iq Unterelement in einer Schleife:

SubEl = [#xmlel{name = <<"members">>, 
     attrs = [{<<"xmlns">>, ?NS_CHAT}], 
     children = [#xmlel{name=<<"member">>, 
         attrs = [{<<"username">>, Username1}], 
         children = []}] 
        [#xmlel{name=<<"member">>, 
         attrs = [{<<"username">>, Username2}], 
         children = []}] 
         ............. 
        }], 

Antwort

0

Hier ist ein Ansatz, der für Sie arbeiten könnte:

create_xml() -> 
    % Your result set 
    Input =[{"group1","username1,username2, username3"}, 
      {"group2","username21,username22, username23"}], 

    Result = lists:map(fun(Group) -> [group_header(element(1, Group)), 
          create_segment(Group), 
          "</members> </group>"] 
      end, 
      Input) 
lists:flatten(Result). 

% Create each group segment by folding over each group 
create_segment(Group) -> 
    Tokenized = string:tokens(element(2, Group), ","), 
    lists:foldl(fun(UserName, Acc) -> 
       [Acc, "<member> <username>", UserName, 
       "</username> </member>"] 
       end, 
       "", 
       Tokenized). 

group_header(GroupName) -> 
    ["<group \"", GroupName, "\"", "<members>"]. 

die oben Rennen, die ich erhalten: t: create_xml().

"<group \"group1\" <members> <member> <username>username1</username> </member><member> <username>username2</username> </member><member> <username> username3</username> </member></members> </group><group \"group2\"<members><member> <username>username21</username> </member><member> <username>username22</username> </member><member> <username> username23</username> </member></members> </group>"