2016-07-21 8 views
1

Wie kann ich xml_write an eine Variable anstelle eines Streams?SWI-Prolog xml_write zu Variable

Ich habe dies versucht:

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

Aber die oben gibt noch zu Ausgangsstrom und darüber hinaus vereinen nicht X mit irgendetwas. Hier ist die Ausgabe:

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

Antwort

1

Sie xml_write/3 verwenden, die Signatur hat:

xml_write(+Stream, +Term, +Options) 

, um effektiv in einen Stream zu schreiben. da Sie eher Allerdings suchen die resultierende XML mit einer Variablen zu vereinen, einen Blick auf xml_write/2 haben, die wie folgt aussieht:

xml_write(+Data, +Options) is det 

Mit diesem in Ihrem Code, könnte es etwas wie folgt aussehen:

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'])])])]. 

Beispielfrage:

?- 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

Danke! Es funktionierte! – Ash