XML/Input: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: syntax coloured)
Line 2,531: Line 2,531:


=={{header|Phix}}==
=={{header|Phix}}==
<lang Phix>include builtins/xml.e
<!--<lang Phix>(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
constant xml = """
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">xml</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<Students>
<span style="color: #008080;">constant</span> <span style="color: #000000;">xml</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
&lt;Students&gt;
<Student Name="Bob" Gender="M" DateOfBirth="1990-03-04" />
<Student Name="Chad" Gender="M" DateOfBirth="1991-05-06" />
&lt;Student Name="April" Gender="F" DateOfBirth="1989-01-02" /&gt;
<Student Name="Dave" Gender="M" DateOfBirth="1992-07-08">
&lt;Student Name="Bob" Gender="M" DateOfBirth="1990-03-04" /&gt;
&lt;Student Name="Chad" Gender="M" DateOfBirth="1991-05-06" /&gt;
<Pet Type="dog" Name="Rover" />
&lt;Student Name="Dave" Gender="M" DateOfBirth="1992-07-08"&gt;
</Student>
<Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" />
&lt;Pet Type="dog" Name="Rover" /&gt;
&lt;/Student&gt;
</Students>
&lt;Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" /&gt;
"""
&lt;/Students&gt;
sequence x = xml_parse(xml)
"""</span>

<span style="color: #004080;">sequence</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xml_parse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xml</span><span style="color: #0000FF;">)</span>
procedure traverse(sequence x)
if x[XML_TAGNAME]="Student" then
<span style="color: #008080;">procedure</span> <span style="color: #000000;">traverse</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">)</span>
?xml_get_attribute(x,"Name")
<span style="color: #008080;">if</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">XML_TAGNAME</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">"Student"</span> <span style="color: #008080;">then</span>
else
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">xml_get_attribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Name"</span><span style="color: #0000FF;">),</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span>
x = x[XML_CONTENTS]
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
if not string(x) then
<span style="color: #008080;">else</span>
for i=1 to length(x) do
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">XML_CONTENTS</span><span style="color: #0000FF;">]</span>
traverse(x[i])
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #004080;">string</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end for
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
end if
<span style="color: #000000;">traverse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
traverse(x[XML_CONTENTS])</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">traverse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">XML_CONTENTS</span><span style="color: #0000FF;">])</span>
<!--</lang>-->
{{out}}
{{out}}
(note the last line (&#x00C9;mily) looks better on this page than it does on a windows console!)
Note the last line (&#x00C9;mily) looks significantly better on this page, and on Linux or when run in a browser, than it (usually) does on a windows console!<br>
You may need to code the constant using Name="&amp;#x00C9;mily", but hopefully not, and not that doing so magically fixes the windows console.<br>
The puts() has been broken in two specifically for running in a browser, so it doesn't look like that ("&amp;"'d), and we ''don't'' want a false on the \n (ie ''do'' map that to &lt;br&gt;).
<pre>
<pre>
"April"
"April"