【问题标题】:erlang mysql multiple row result to xmlerlang mysql多行结果到xml
【发布时间】:2016-09-22 09:34:05
【问题描述】:

我在 erlang 中有 mysql select 的多行结果:

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

结果 = [{"group","username1,username2, username3 ......."}.... {"group","username1,username2, username3 ........"} ]

想要将结果转换为 xml 元素:

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>

在循环中将其放入 xmpp iq 子元素的任何简单方法:

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

【问题讨论】:

    标签: mysql xml erlang xmpp ejabberd


    【解决方案1】:

    这是一种可能对您有用的方法:

    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>"].
    

    运行上述,我得到: 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>"
    

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2015-02-07
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多