XML/Output: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
m (→‎{{header|Phix}}: syntax coloured)
m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(10 intermediate revisions by 6 users not shown)
Line 14:
Short & shrift</pre>
Should produce the XML (but not necessarily with the indentation):
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
The document may include an <tt><?xml?></tt> declaration and document type declaration, but these are optional. If attempting this task by direct string manipulation, the implementation ''must'' include code to perform entity substitution for the characters that have entities defined in the XML 1.0 specification.
Line 26:
 
'''Note to editors:''' Program output with escaped characters will be viewed as the character on the page so you need to 'escape-the-escapes' to make the RC entry display what would be shown in a plain text viewer (See [[Talk:XML_Creation#Escaping_Escapes|this]]).
Alternately, output can be placed in <nowiki><syntaxhighlight lang ="xml"></langsyntaxhighlight></nowiki> tags without any special treatment.
 
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program outputXml64.s */
Line 197:
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
</lang>
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">DEFINE PTR="CARD"
DEFINE CHARACTER_SIZE="4"
TYPE Character=[PTR name,remark]
Line 276:
 
OutputCharacters(d,count)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/XML_Output.png Screenshot from Atari 8-bit computer]
Line 293:
 
character_remarks.adb:
<langsyntaxhighlight Adalang="ada">with Ada.Strings.Unbounded;
with Ada.Text_IO.Text_Streams;
with DOM.Core.Documents;
Line 332:
N => My_Document,
Pretty_Print => True);
end Character_Remarks;</langsyntaxhighlight>
 
=== Alternative version using Matreshka ===
Line 338:
Uses [http://forge.ada-ru.org/matreshka Matreshka SAX API for XML].
 
<langsyntaxhighlight Adalang="ada">with Ada.Wide_Wide_Text_IO;
 
with League.Strings;
Line 390:
(+"Tam O'Shanter", +"Burns: ""When chapman billies leave the street ..."""),
(+"Emily", +"Short & shrift")));
end Main;</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
<langsyntaxhighlight lang="algol68"># returns a translation of str suitable for attribute values and content in an XML document #
OP TOXMLSTRING = ( STRING str )STRING:
BEGIN
Line 439:
)
)
</syntaxhighlight>
</lang>
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks><Character name="April">Bubbly: I&apos;m &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O&apos;Shanter">Burns: &quot;When chapman billies leave the street ...</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program outputXml.s */
Line 650:
bx lr @ return
 
</syntaxhighlight>
</lang>
{{output}}
<pre>
Line 662:
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">gosub constants
names := xmlescape(names)
remarks := xmlescape(remarks)
Line 711:
Short & shrift
)
return</langsyntaxhighlight>
 
=={{header|BASIC}}==
 
==={{header|Applesoft BASIC}}===
<langsyntaxhighlight ApplesoftBasiclang="applesoftbasic">100 Q$ = CHR$(34)
110 DE$(0) = "April"
120 RE$(0) = "Bubbly: I'm > Tam and <= Emily"
Line 744:
370 PRINT C$;
380 NEXT N
390 RETURN</langsyntaxhighlight>
 
 
Line 751:
Not terribly different from the Applesoft BASIC example above, but this allows for a few more character/entity translations.
 
<langsyntaxhighlight lang="gwbasic">1 rem xml/output - commodore basic
2 rem rosetta code
5 print chr$(147);chr$(14):gosub 900
Line 805:
1010 data "Emily","Short & shrift"
1015 data "Joey","Always look ^."
1999 data "[end]","[end]"</langsyntaxhighlight>
 
{{out}}
Line 834:
 
=={{header|Bracmat}}==
<langsyntaxhighlight lang="bracmat">( ( 2XML
= PCDATAentities attributeValueEntities doAll doAttributes
, xml
Line 945:
)
)
)</langsyntaxhighlight>
{{out}}
<pre><?xml?>
Line 954:
 
=={{header|C}}==
==={{libheader|libXML}}===
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Line 994:
return EXIT_SUCCESS;
}</langsyntaxhighlight>
 
==={{libheader|Gadget}}===
<syntaxhighlight lang="c">
#include <gadget/gadget.h>
 
LIB_GADGET_START
 
const char* codes[] = {"&amp;","&gt;","&lt;"};
const char* repl[] = {"&",">","<"};
char* change_codes( const char* xml_line )
{
int i;
String xml;
Let( xml, xml_line );
Iterator up i [0:1:3]{
Get_fn_let( xml, Str_tran( xml, repl[i], codes[i] ) );
}
return xml;
}
char* generate_xml( const char* names[], int lnames, const char* remarks[] )
{
String xml;
char attrib[100];
int i;
Iterator up i [0:1:lnames]{
String remk;
Get_fn_let ( remk, change_codes( remarks[i] ) );
sprintf(attrib,"name=\"%s\"",names[i]);
if(!i) {
Get_fn_let ( xml, Parser("Character", attrib, remk, NORMAL_TAG ));
}else{
Get_fn_cat ( xml, Parser("Character", attrib, remk, NORMAL_TAG ));
}
Free secure remk;
}
Get_fn_let ( xml, Parser("CharacterRemarks", "", xml, NORMAL_TAG ));
Get_fn_let ( xml, Str_tran(xml,"><",">\n<") );
return xml;
}
 
#define alen(_X_) ( sizeof(_X_) / sizeof(const char*) )
Main
const char *names[] = {
"April", "Tam O'Shanter", "Emily"
};
const char *remarks[] = {
"Bubbly: I'm > Tam and <= Emily",
"Burns: \"When chapman billies leave the street ...\"",
"Short & shrift"
};
char* xml = generate_xml( names, alen(names), remarks );
Print "%s\n", xml;
Free secure xml;
End
</syntaxhighlight>
{{out}}
 
$ ./tests/RC_xmlout
<syntaxhighlight lang="xml">
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
 
=={{header|C sharp}}==
{{works with|C sharp|C#|3.0+}}
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
using System.Linq;
Line 1,024 ⟶ 1,091:
Console.WriteLine(xml);
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
Library: Boost
<langsyntaxhighlight lang="cpp">#include <vector>
#include <utility>
#include <iostream>
Line 1,073 ⟶ 1,140:
xmlstring.append( "</CharacterRemarks>" ) ;
return xmlstring ;
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="lisp">(use 'clojure.xml)
(defn character-remarks-xml [characters remarks]
(with-out-str (emit-element
Line 1,084 ⟶ 1,151:
{:tag :Character,
:attrs {:name (item 0)},
:content [(item 1)]}) )})))</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
Line 1,090 ⟶ 1,157:
{{libheader|Closure XML}}
 
<langsyntaxhighlight lang="lisp">(defun write-xml (characters lines &optional (out *standard-output*))
(let* ((doc (dom:create-document 'rune-dom:implementation nil nil nil))
(chars (dom:append-child doc (dom:create-element doc "Characters"))))
Line 1,099 ⟶ 1,166:
(dom:append-child chars c)))
characters lines)
(write-string (dom:map-document (cxml:make-rod-sink) doc) out)))</langsyntaxhighlight>
 
Example of use:
 
<langsyntaxhighlight lang="lisp">(write-xml '("April" "Tam O'Shanter" "Emily")
'("Bubbly: I'm > Tam and <= Emily"
"Burns: \"When chapman billies leave the street ...\""
"Short & shrift"))</langsyntaxhighlight>
 
{{out}}
Line 1,115 ⟶ 1,182:
=={{header|D}}==
{{libheader|KXML}}
<langsyntaxhighlight lang="d">import kxml.xml;
char[][][]characters =
[["April","Bubbly: I'm > Tam and <= Emily"],
Line 1,132 ⟶ 1,199:
addChars(root,characters);
std.stdio.writefln("%s",root.write);
}</langsyntaxhighlight>
<pre>
<?xml?>
Line 1,149 ⟶ 1,216:
 
=={{header|Delphi}}==
<syntaxhighlight lang="delphi">
<lang Delphi>
//You need to use these units
uses
Line 1,226 ⟶ 1,293:
end;
 
</syntaxhighlight>
</lang>
 
=={{header|Erlang}}==
<syntaxhighlight lang="erlang">
<lang Erlang>
-module( xml_output ).
 
Line 1,242 ⟶ 1,309:
 
contents() -> [{"April", "Bubbly: I'm > Tam and <= Emily"}, {"Tam O'Shanter", "Burns: \"When chapman billies leave the street ...\""}, {"Emily", "Short & shrift"}].
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,251 ⟶ 1,318:
=={{header|Euphoria}}==
{{trans|BASIC}}
<langsyntaxhighlight lang="euphoria">function xmlquote(sequence s)
sequence r
r = ""
Line 1,284 ⟶ 1,351:
puts(1,"</Character>\n")
end for
puts(1,"</CharacterRemarks>\n")</langsyntaxhighlight>
 
{{out}}
Line 1,295 ⟶ 1,362:
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">#light
 
open System.Xml
Line 1,316 ⟶ 1,383:
root.AppendChild node |> ignore
) characters
doc.OuterXml</langsyntaxhighlight>
<pre><CharacterRemarks>
<Character name="April">Bubbly: I'm &amp;gt; Tam and &amp;lt;= Emily</Character>
Line 1,324 ⟶ 1,391:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: sequences xml.syntax xml.writer ;
 
: print-character-remarks ( names remarks -- )
[ [XML <Character name=<-> ><-></Character> XML] ] 2map
[XML <CharacterRemarks><-></CharacterRemarks> XML] pprint-xml ;</langsyntaxhighlight>
Example of usage:
<langsyntaxhighlight lang="factor">{ "April" "Tam O'Shanter" "Emily" } {
"Bubbly: I'm > Tam and <= Emily"
"Burns: \"When chapman billies leave the street ...\""
"Short & shrift"
} print-remarks</langsyntaxhighlight>
 
=={{header|Fantom}}==
<langsyntaxhighlight lang="fantom">
using xml
 
Line 1,364 ⟶ 1,431:
}
}
</syntaxhighlight>
</lang>
 
{{out}} (not exactly conforming):
Line 1,380 ⟶ 1,447:
{{libheader|Forth Foundation Library}}
 
<langsyntaxhighlight lang="forth">include ffl/est.fs
include ffl/xos.fs
 
Line 1,420 ⟶ 1,487:
 
\ Output xml string
xml str-get type cr</langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="basic">Data "April", "Bubbly: I'm > Tam and <= Emily", _
"Tam O'Shanter", "Burns: ""When chapman billies leave the street ...""", _
"Emily", "Short & shrift"
Line 1,462 ⟶ 1,529:
Next
Function = r
End Function</langsyntaxhighlight>
 
=={{header|Go}}==
'''Using package xml to marshal from a data structure:'''
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,500 ⟶ 1,567:
}
fmt.Println(x)
}</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I&#39;m &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O&#39;Shanter">Burns: &#34;When chapman billies leave the street ...&#34;</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
Using the text/template package to generate text:
(but still leaning on the xml package for escaping.)
<langsyntaxhighlight lang="go">package main
import (
Line 1,555 ⟶ 1,622:
}
fmt.Println(x)
}</langsyntaxhighlight>
Output is same as marshalled version.
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
def names = ["April", "Tam O'Shanter", "Emily"]
Line 1,568 ⟶ 1,635:
}
 
println writer.toString()</langsyntaxhighlight>
 
=={{header|Haskell}}==
This implementation uses the [http://hackage.haskell.org/package/xml <code>xml</code> package].
 
<langsyntaxhighlight lang="haskell">import Text.XML.Light
 
characterRemarks :: [String] -> [String] -> String
Line 1,585 ⟶ 1,652:
[Attr (unqual "name") name]
[Text $ CData CDataText remark Nothing]
Nothing</langsyntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight HicEstlang="hicest">CHARACTER names="April~Tam O'Shanter~Emily~"
CHARACTER remarks*200/%Bubbly: I'm > Tam and <= Emily~Burns: "When chapman billies leave the street ..."~Short & shrift~%/
CHARACTER XML*1000
Line 1,602 ⟶ 1,669:
XML = TRIM(XML) // '<Character name="' // name // '">' // remark // '</Character>' // $CRLF
ENDDO
XML = TRIM(XML) // "</CharacterRemarks>"</langsyntaxhighlight>
 
=={{header|J}}==
Line 1,608 ⟶ 1,675:
First create the table of substitutions and the verb which properly escapes the input string:
 
<langsyntaxhighlight lang="j">tbl=: ('&quote;'; '&amp;'; '&lt;'; '&gt;') (a.i.'"&<>')} <"0 a.
esc=: [:; {&tbl@:i.~&a.</langsyntaxhighlight>
 
Then create the verb which combines name with remark:
<langsyntaxhighlight Jlang="j">cmb=: [:; dyad define &.>
'<Character name="', (esc x), '">', (esc y), '</Character>', LF
)</langsyntaxhighlight>
 
Finally, create the verb which creates the final XML:
<langsyntaxhighlight lang="j">xmlify=: '<CharacterRemarks>', LF, cmb, '</CharacterRemarks>'"_</langsyntaxhighlight>
 
Example:
 
<langsyntaxhighlight lang="j">names=: 'April'; 'Tam O''Shanter'; 'Emily'
 
remarks=: <;._2]0 :0
Line 1,627 ⟶ 1,694:
Burns: "When chapman billies leave the street ..."
Short & shrift
)</langsyntaxhighlight>
 
<syntaxhighlight lang="text"> names xmlify remarks
<CharacterRemarks>
<Character name="April"> I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter"> Burns: &quote;When chapman billies leave the street ...&quote;</Character>
<Character name="Emily"> Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|Java}}==
===Using DOM===
<langsyntaxhighlight lang="java">import java.io.StringWriter;
 
import javax.xml.parsers.DocumentBuilderFactory;
Line 1,698 ⟶ 1,765:
}
}</langsyntaxhighlight>
 
Result:
<langsyntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character></langsyntaxhighlight>
 
===Using the Streaming API for XML (StAX)===
<langsyntaxhighlight lang="java">import java.io.StringWriter;
 
import javax.xml.stream.XMLOutputFactory;
Line 1,745 ⟶ 1,812:
}
}
}</langsyntaxhighlight>
 
This produces:
<langsyntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?><CharacterRemarks><Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character><Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character><Character name="Emily">Short &amp; shrift</Character></CharacterRemarks></langsyntaxhighlight>
 
=={{header|Joy}}==
<syntaxhighlight lang="joy">
<lang Joy>
DEFINE subst ==
[[['< "&lt;" putchars]
Line 1,760 ⟶ 1,827:
XMLOutput ==
"<CharacterRemarks>\n" putchars
[ "<Character name=\"" putchars uncons swap putchars "\">" putchars first subst "</Character>\n" putchars] step
"</CharacterRemarks>\n" putchars.
 
[ [ "April" "Bubbly: I'm > Tam and <= Emily" ]
[ "Tam O'Shanter" "Burns: \"When chapman billies leave the street ...\"" ]
[ "Emily" "Short & shrift" ]
] XMLOutput.
</syntaxhighlight>
</lang>
 
=={{header|jq}}==
{{trans|Wren}}
{{works with|jq}}
'''Also works with gojq, the Go implementation of jq'''
<syntaxhighlight lang=jq>
def escapes: [
["&" , "&amp;"], # must do this one first
["\"", "&quot;"],
["'" , "&apos;"],
["<" , "&lt;"],
[">" , "&gt;"]
];
 
def xmlEscape:
reduce escapes[] as $esc (.; gsub($esc[0]; $esc[1]));
 
def xmlDoc(names; remarks):
reduce range(0;names|length) as $i ("<CharacterRemarks>\n";
(names[$i]|xmlEscape) as $name
| (remarks[$i]|xmlEscape) as $remark
| . + " <Character name=\"\($name)\">\($remark)</Character>\n")
+ "</CharacterRemarks>" ;
 
def names: ["April", "Tam O'Shanter", "Emily"];
def remarks: [
"Bubbly: I'm > Tam and <= Emily",
"Burns: \"When chapman billies leave the street ...\"",
"Short & shrift"
];
 
xmlDoc(names; remarks)
</syntaxhighlight>
{{output}}
As for [[#Wren|Wren]].
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">using LightXML
 
dialog = [("April", "Bubbly: I'm > Tam and <= Emily"),
Line 1,786 ⟶ 1,888:
 
println(xdoc)
</langsyntaxhighlight>{{output}}<pre>
<?xml version="1.0" encoding="utf-8"?>
<CharacterRemarks>
Line 1,796 ⟶ 1,898:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.3
 
import javax.xml.parsers.DocumentBuilderFactory
Line 1,840 ⟶ 1,942:
println(sw)
}
</syntaxhighlight>
</lang>
 
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
=={{header|Lasso}}==
Lasso has built in support for both creating and parsing xml.
<langsyntaxhighlight Lassolang="lasso">define character2xml(names::array, remarks::array) => {
 
fail_if(#names -> size != #remarks -> size, -1, 'Input arrays not of same size')
Line 1,887 ⟶ 1,989:
array(`April`, `Tam O'Shanter`, `Emily`),
array(`Bubbly: I'm > Tam and <= Emily`, `Burns: "When chapman billies leave the street ..."`, `Short & shrift`)
)</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="xml">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
Line 1,898 ⟶ 2,000:
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
=={{header|Lua}}==
Using the LuaXML library as available via luarocks. Note that strings in Lua can be enclosed in either single or double quotes to help reduce the need for escape characters.
<langsyntaxhighlight Lualang="lua">require("LuaXML")
 
function addNode(parent, nodeName, key, value, content)
Line 1,914 ⟶ 2,016:
addNode(root, "Character", "name", "Tam O'Shanter", 'Burns: "When chapman billies leave the street ..."')
addNode(root, "Character", "name", "Emily", "Short & shrift")
print(root)</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I&apos;m &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O&apos;Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
Note also that LuaXML escapes quote marks and apostrophes, which makes the output slightly different to the task requirement. This can be 'fixed' if necessary using Lua's in-built string.gsub function:
<langsyntaxhighlight Lualang="lua">xmlStr = xml.str(root):gsub("&apos;", "'"):gsub("&quot;", '"')
print(xmlStr)</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
Flush
Data "April", {Bubbly: I'm > Tam and <= Emily}
Data "Tam O'Shanter", {Burns: "When chapman billies leave the street ..."}
Data "Emily", {Short & shrift}
declare xml xmlData
with xml, "xml" as doc$, "beautify" as beautify
method xml, "PrepareNode", "CharacterRemarks" as Node
method xml, "InsertNode", Node
while not empty
read name$, text$
method xml, "PrepareNode", "Character", text$ as Node1
method xml, "PlaceAttributeToNode", Node1, "name", name$
method xml, "AppendChild", Node1
end while
beautify=-4
Report doc$
}
CheckIt
</syntaxhighlight>
{{out}}
<syntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I&apos;m &qt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></syntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
Some tricky input with the second remark
<langsyntaxhighlight Mathematicalang="mathematica">c = {"April", "Tam O'Shanter","Emily"};
r = {"Bubbly:I'm > Tam and <= Emily" ,
StringReplace["Burns:\"When chapman billies leave the street ...\"", "\"" -> ""], "Short & shrift"};
Line 1,940 ⟶ 2,073:
XMLElement["Character", {"name" -> c[[2]]}, {r[[2]]}],
XMLElement["Character", {"name" -> c[[3]]}, {r[[3]]}]
}], "XML", "AttributeQuoting" -> "\""]</langsyntaxhighlight>
{{out}}
<pre><CharacterRemarks>
Line 1,949 ⟶ 2,082:
 
=={{header|MATLAB}}==
<langsyntaxhighlight Matlablang="matlab">RootXML = com.mathworks.xml.XMLUtils.createDocument('CharacterRemarks');
docRootNode = RootXML.getDocumentElement;
thisElement = RootXML.createElement('Character');
Line 1,962 ⟶ 2,095:
thisElement.setAttribute('Name','Emily')
thisElement.setTextContent('Short & shrift');
docRootNode.appendChild(thisElement);</langsyntaxhighlight>
 
{{out}}
Line 1,982 ⟶ 2,115:
===Using DOM===
{{trans|Java}}
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
 
options replace format comments java crossref savelog symbols nobinary
Line 2,047 ⟶ 2,180:
 
return
</syntaxhighlight>
</lang>
;Output
<langsyntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
Line 2,055 ⟶ 2,188:
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
===Using the Streaming API for XML (StAX)===
{{trans|Java}}
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
 
options replace format comments java crossref savelog symbols nobinary
Line 2,107 ⟶ 2,240:
 
return
</syntaxhighlight>
</lang>
;Output
<langsyntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?>
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
Line 2,115 ⟶ 2,248:
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import xmltree, strtabs, sequtils
 
proc charsToXML(names, remarks: seq[string]): XmlNode =
Line 2,128 ⟶ 2,261:
@["Bubbly: I'm > Tam and <= Emily",
"Burns: \"When chapman billies leave the street ...\"",
"Short & shrift"])</langsyntaxhighlight>
Output:
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I&apos;m &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">use Data.XML;
use Collection.Generic;
 
Line 2,166 ⟶ 2,299:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
Line 2,172 ⟶ 2,305:
from the toplevel using the library [http://tech.motion-twin.com/xmllight.html xml-light]:
 
<langsyntaxhighlight lang="ocaml"># #directory "+xml-light" (* or maybe "+site-lib/xml-light" *) ;;
 
# #load "xml-light.cma" ;;
Line 2,194 ⟶ 2,327:
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
- : unit = ()</langsyntaxhighlight>
 
Another solution using the library [http://erratique.ch/software/xmlm xmlm]:
 
<langsyntaxhighlight lang="ocaml">#directory "+xmlm"
#load "xmlm.cmo"
open Xmlm
Line 2,219 ⟶ 2,352:
) datas;
output xo (`El_end);
print_newline()</langsyntaxhighlight>
 
=={{header|Oz}}==
It is natural to represent XML document as nested Oz records. Writing a function that serializes records to textual XML is not too difficult.
 
<langsyntaxhighlight lang="oz">declare
proc {Main}
Names = ["April"
Line 2,312 ⟶ 2,445:
end
in
{Main}</langsyntaxhighlight>
 
Output:
<langsyntaxhighlight lang="xml"><?xml version="1.0" ?>
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|Perl}}==
{{libheader|XML::Mini}}
<langsyntaxhighlight lang="perl">#! /usr/bin/perl
use strict;
use XML::Mini::Document;
Line 2,342 ⟶ 2,475:
$stud->text($s->[1]);
}
print $doc->toString();</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">hchars</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hsubs</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">columnize</span><span style="color: #0000FF;">({{</span><span style="color: #008000;">"&lt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&amp;lt;"</span><span style="color: #0000FF;">},</span>
Line 2,380 ⟶ 2,513:
-- &lt;CharacterName="Emily"&gt;Short &amp;amp; shrift&lt;/Character&gt;
-- &lt;/CharacterRemarks&gt;</span>
<!--</langsyntaxhighlight>-->
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(load "@lib/xml.l")
 
(de characterRemarks (Names Remarks)
Line 2,401 ⟶ 2,534:
"I'm > Tam and <= Emily"
"Burns: \"When chapman billies leave the street ..."
"Short & shrift" ) )</langsyntaxhighlight>
Output:
<pre><CharacterRemarks>
Line 2,410 ⟶ 2,543:
 
=={{header|PureBasic}}==
<langsyntaxhighlight Purebasiclang="purebasic">DataSection
dataItemCount:
Data.i 3
Line 2,468 ⟶ 2,601:
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
CloseConsole()
EndIf</langsyntaxhighlight>
Sample output:
<pre><CharacterRemarks>
Line 2,480 ⟶ 2,613:
=={{header|Python}}==
Normal output is all one line of XML, the .replace(...) makes it more readable.
<langsyntaxhighlight lang="python">>>> from xml.etree import ElementTree as ET
>>> from itertools import izip
>>> def characterstoxml(names, remarks):
Line 2,493 ⟶ 2,626:
remarks = [ "Bubbly: I'm > Tam and <= Emily",
'Burns: "When chapman billies leave the street ..."',
'Short & shrift' ] ).replace('><','>\n<')</langsyntaxhighlight>
Gives the output:
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: "When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|R}}==
{{libheader|XML}}
<langsyntaxhighlight Rlang="r">library(XML)
char2xml <- function(names, remarks){
tt <- xmlHashTree()
Line 2,515 ⟶ 2,648:
}
output <- char2xml( names=c("April","Tam O'Shanter","Emily"),
remarks=c("Bubbly: I'm > Tam and <= Emily", 'Burns: "When chapman billies leave the street ..."', "Short & shrift") )</langsyntaxhighlight>
 
Gives the output: <!-- manually inserted "&amp;" where required to protect actual R output from the browser -->
Line 2,526 ⟶ 2,659:
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
(require xml)
Line 2,543 ⟶ 2,676:
"Burns: \"When chapman billies leave the street ...\""
"Short & shrift"))))
</syntaxhighlight>
</lang>
 
Output:
 
<langsyntaxhighlight lang="xml">
<CharacterRemarks>
<Character name="April">
Line 2,559 ⟶ 2,692:
</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
Line 2,565 ⟶ 2,698:
{{works with|Rakudo|2018.05}}
 
<syntaxhighlight lang="raku" perl6line>use XML::Writer;
 
my @students =
Line 2,575 ⟶ 2,708:
my @lines = map { :Character[:name(.[0]), .[1]] }, @students;
 
say XML::Writer.serialize( CharacterRemarks => @lines );</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight XMLlang="xml"><CharacterRemarks><Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character>
<Character name="Emily">Short &amp; shrift</Character></CharacterRemarks></langsyntaxhighlight>
 
=={{header|Rascal}}==
<langsyntaxhighlight lang="rascal">import Prelude;
import lang::xml::DOM;
 
Line 2,597 ⟶ 2,730:
return println(xmlPretty(x));
}
}</langsyntaxhighlight>
This gives an output:
<langsyntaxhighlight lang="rascal">rascal>xmloutput(charnames, remarks)
<?xml version="1.0" encoding="UTF-8"?>
<CharacterRemarks>
Line 2,608 ⟶ 2,741:
 
 
ok</langsyntaxhighlight>
 
=={{header|REXX}}==
REXX doesn't have any functions to handle XML entities, an abbreviated version is included here.
<langsyntaxhighlight lang="rexx">/*REXX program creates an HTML (XML) list of character names and corresponding remarks. */
charname. =
charname.1 = "April"
Line 2,728 ⟶ 2,861:
xml_: parse arg _ /*make an XML entity (&xxxx;) */
if pos(_, $)\==0 then return changestr(_, $, "&"arg(2)";")
return $</langsyntaxhighlight>
Some older REXXes don't have a '''changestr''' bif, so one is included here &nbsp; ──► &nbsp; [[CHANGESTR.REX]].
 
Line 2,750 ⟶ 2,883:
=={{header|Ruby}}==
The {{libheader|REXML}}library handles character mapping when adding attributes and text.
<langsyntaxhighlight lang="ruby">require 'rexml/document'
include REXML
 
Line 2,767 ⟶ 2,900:
 
# output with indentation
doc.write($stdout, 2)</langsyntaxhighlight>
 
produces <!-- manually inserted "&amp;" where required to protect actual Ruby output from the browser -->
Line 2,783 ⟶ 2,916:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">extern crate xml;
 
use std::collections::HashMap;
Line 2,840 ⟶ 2,973:
assert!(output.contains("<Character name=\"Emily\">Short &amp; shrift</Character>"));
}
}</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">val names = List("April", "Tam O'Shanter", "Emily")
 
val remarks = List("Bubbly: I'm > Tam and <= Emily", """Burns: "When chapman billies leave the street ..."""", "Short & shrift")
Line 2,852 ⟶ 2,985:
 
characterRemarks(names, remarks)
</syntaxhighlight>
</lang>
 
Result:
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character><Character name="Tam O'Shanter">Burns:
&quot;When chapman billies leave the street ...&quot;</Character><Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
 
=={{header|SenseTalk}}==
<langsyntaxhighlight lang="sensetalk">put ("April", "Tam O'Shanter", "Emily") into names
put ("Bubbly: I'm > Tam and <= Emily", <<Burns: "When chapman billies leave the street ...">>, "Short & shrift") into remarks
put (_tag: "CharacterRemarks") as tree into document
Line 2,867 ⟶ 3,000:
insert (_tag: "Character", name: name, _children: item the counter of remarks) as tree into document's _children
end repeat
put document</langsyntaxhighlight>
 
{{out}}
Line 2,880 ⟶ 3,013:
=={{header|Sidef}}==
{{trans|Perl}}
<langsyntaxhighlight lang="ruby">require('XML::Mini::Document');
 
var students = [
Line 2,898 ⟶ 3,031:
};
 
print doc.toString;</langsyntaxhighlight>
 
=={{header|Slate}}==
 
<langsyntaxhighlight lang="slate">lobby define: #remarks -> (
{'April' -> 'Bubbly: I\'m > Tam and <= Emily'.
'Tam O\'Shanter' -> 'Burns: "When chapman billies leave the street ..."'.
Line 2,915 ⟶ 3,048:
].
 
inform: writer contents</langsyntaxhighlight>
Produces:
<div style="width:full;overflow:scroll">
Line 2,924 ⟶ 3,057:
=={{header|Tcl}}==
===Using only Tcl string manipulation===
<langsyntaxhighlight Tcllang="tcl">proc xquote string {
list [string map "' &apos; \\\" &quot; < &gt; > &lt; & &amp;" $string]
}
Line 2,951 ⟶ 3,084:
append cmd " \[< Character {Name [xquote $name]} [xquote $comment]\]"
}
puts [eval $cmd]</langsyntaxhighlight>
produces<pre><CharacterRemarks><Character Name='April'>Bubbly: I&amp;apos;m &amp;lt; Tam and &amp;gt;= Emily</Character>
<Character Name='Tam O&amp;apos;Shanter'>Burns: &amp;quot;When chapman billies leave the street ...&amp;quot;</Character>
Line 2,958 ⟶ 3,091:
===Working with DOM trees===
Using {{libheader|tDOM}}
<langsyntaxhighlight lang="tcl">package require tdom
set xml [dom createDocument CharacterRemarks]
foreach {name comment} {
Line 2,970 ⟶ 3,103:
[$xml documentElement] appendChild $elem
}
$xml asXML</langsyntaxhighlight>
<pre><CharacterRemarks>
<Character name="April">Bubbly: I'm &amp;amp;gt; Tam and &amp;amp;lt;= Emily</Character>
Line 2,977 ⟶ 3,110:
</CharacterRemarks></pre>
Using {{libheader|TclXML}}
<langsyntaxhighlight lang="tcl">package require dom
set xml [dom::DOMImplementation create]
set root [dom::document createElement $xml CharacterRemarks]
Line 2,989 ⟶ 3,122:
dom::document createTextNode $element $comment
}
dom::DOMImplementation serialize $xml -indent 1</langsyntaxhighlight>
produces (with line breaks added for clarity:
<pre><?xml version="1.0"?>
Line 2,999 ⟶ 3,132:
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
STRUCTURE xmloutput
Line 3,021 ⟶ 3,154:
WRITE/NEXT d
ENDACCESS d
</syntaxhighlight>
</lang>
Output in file "dest":
<pre>
Line 3,033 ⟶ 3,166:
=={{header|VBScript}}==
Saves in a file.
<syntaxhighlight lang="vbscript}}">
<lang VBScript}}>
Set objXMLDoc = CreateObject("msxml2.domdocument")
 
Line 3,051 ⟶ 3,184:
objRoot.appendChild objNode
End Function
</syntaxhighlight>
</lang>
 
=={{header|Vedit macro language}}==
The input data is given in an edit buffer, one name+remark pair on each line line, separated with TAB character.
<langsyntaxhighlight lang="vedit">// Replace special characters with entities:
Replace("&", "&amp;", BEGIN+ALL+NOERR) // this must be the first replace!
Replace("<", "&lt;", BEGIN+ALL+NOERR)
Line 3,072 ⟶ 3,205:
}
EOF
IT("</CharacterRemarks>") IN</langsyntaxhighlight>
 
Example input:
Line 3,091 ⟶ 3,224:
 
=={{header|Visual Basic .NET}}==
<langsyntaxhighlight lang="vbnet">Module XMLOutput
Sub Main()
Dim charRemarks As New Dictionary(Of String, String)
Line 3,104 ⟶ 3,237:
Console.WriteLine(xml)
End Sub
End Module</langsyntaxhighlight>
 
Output:
Line 3,116 ⟶ 3,249:
 
=={{header|Wren}}==
<langsyntaxhighlight ecmascriptlang="wren">var escapes = [
["&" , "&amp;"], // must do this one first
["\"", "&quot;"],
Line 3,146 ⟶ 3,279:
"Short & shrift"
]
xmlDoc.call(names, remarks)</langsyntaxhighlight>
 
{{out}}
<langsyntaxhighlight lang="xml"><CharacterRemarks>
<Character name="April">Bubbly: I&apos;m &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O&apos;Shanter">Burns: &quot;When chapman billies leave the street ...&quot;</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks></langsyntaxhighlight>
<br>
{{libheader|Wren-xsequence}}
Alternatively, using an XML library.
<syntaxhighlight lang="wren">import "./xsequence" for XDocument, XElement, XAttribute
 
var createXmlDoc = Fn.new { |names, remarks|
var root = XElement.new("CharacterRemarks")
for (i in 0...names.count) {
var xe = XElement.new("Character", remarks[i])
xe.add(XAttribute.new("name", names[i]))
root.add(xe)
}
return XDocument.new(root)
}
 
var names = ["April", "Tam O'Shanter", "Emily"]
var remarks = [
"Bubbly: I'm > Tam and <= Emily",
"Burns: \"When chapman billies leave the street ...\"",
"Short & shrift"
]
var doc = createXmlDoc.call(names, remarks)
System.print(doc)</syntaxhighlight>
{{out}}
Same as the first version but prefixed by:
<syntaxhighlight lang="xml"><?xml version="1.0" encoding="utf-8"?></syntaxhighlight>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code ChOut=8, CrLf=9, Text=12;
string 0; \use zero-terminated strings
 
Line 3,185 ⟶ 3,344:
];
Text(0, "</CharacterRemarks>"); CrLf(0);
]</langsyntaxhighlight>
 
{{out}}
Line 3,206 ⟶ 3,365:
Variant #1-1: using a FLOWR expression and element constructors
 
<langsyntaxhighlight lang="xquery">
let $names := ("April","Tam O'Shanter","Emily")
let $remarks := ("Bubbly: I'm > Tam and <= Emily", 'Burns: "When chapman billies leave the street ..."',"Short &amp; shrift")
Line 3,216 ⟶ 3,375:
}
}
</syntaxhighlight>
</lang>
 
Variant #1-2: using a FLOWR expression and literal XML
 
<langsyntaxhighlight lang="xquery">
let $names := ("April","Tam O'Shanter","Emily")
let $remarks := ("Bubbly: I'm > Tam and <= Emily", 'Burns: "When chapman billies leave the street ..."',"Short &amp; shrift")
Line 3,229 ⟶ 3,388:
}
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
Variant #2-1: using a Higher Order Function and element constructors
 
<langsyntaxhighlight lang="xquery">
xquery version "3.1";
 
Line 3,246 ⟶ 3,405:
})
}
</syntaxhighlight>
</lang>
 
Variant #2-2: using a Higher Order Function and literal XML expressions :)
 
<langsyntaxhighlight lang="xquery">
xquery version "3.1";
 
Line 3,262 ⟶ 3,421:
}
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
Result for all variants:
 
<langsyntaxhighlight lang="xml">
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
Line 3,272 ⟶ 3,431:
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</syntaxhighlight>
</lang>
 
=={{header|Yabasic}}==
<langsyntaxhighlight Yabasiclang="yabasic">sign$ = "<,&lt;,>,&gt;,&,&amp;"
dim sign$(1)
long = token(sign$, sign$(), ",")
Line 3,320 ⟶ 3,479:
next i
 
print xml_CharacterRemarks$(testset$())</langsyntaxhighlight>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">fcn xmlEscape(text){
text.replace(" &"," &amp;") .replace(" \""," &quot;")
.replace(" '"," &apos;") .replace(" <"," &lt;") .replace(" >"," &gt;")
Line 3,340 ⟶ 3,499:
0'|Burns: "When chapman billies leave the street ..."|,
"Short & shrift"))
.print();</langsyntaxhighlight>
{{out}}
<pre>
9,476

edits