SWI-Prolog xml_write 到变量

SWI-Prolog xml_write to variable

如何 xml_write 到变量而不是流?

我试过这个:

current_output(O),
with_output_to(string(X),
               xml_write(O,[element(table, [style="width:50%"],
                           [element(tr, [span = 2],
                           [element(td, [], ['First name']),
                            element(td, [], ['Last name'])])])],
                           [header(false)])).

但是上面的仍然输出到输出流,而且,没有与任何东西统一X。这是输出:

<table style="width:50%">
  <tr span="2">
    <td>First name</td>
    <td>Last name</td>
  </tr>
</table>
O = <stream>(6D342F30),
X = "".

您使用的 xml_write/3 具有签名:

xml_write(+Stream, +Term, +Options)

为了有效地写入流。但是,由于您更希望将结果 XML 与变量统一,请查看 xml_write/2 ,它看起来像:

xml_write(+Data, +Options) is det

在您的代码中使用它,它可能类似于:

xml_output(X) :-
    table(Out),
    with_output_to(string(X),
                   xml_write(Out,[header(false)])
                  ),
    writeln(X).

table(R) :-
    R = [element(table, [style="width:50%"],
        [element(tr, [span = 2],
        [element(td, [], ['First name']),
         element(td, [], ['Last name'])])])].

示例查询:

?- xml_output(R).
   <table style="width:50%">
     <tr span="2">
       <td>First name</td>
       <td>Last name</td>
     </tr>
   </table>
   R = "<table style=\"width:50%\">\n  <tr span=\"2\">\n    <td>First name</td>\n    <td>Last name</td>\n  </tr>\n</table>".