2016-07-21 81 views
1

我如何xml_write而不是流的变量?SWI-Prolog 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 = "". 

回答

1

您正在使用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>". 
+1

谢谢!有效! – Ash