XML/Input: Difference between revisions

4,054 bytes added ,  2 years ago
m
→‎{{header|Phix}}: syntax coloured
m (→‎{{header|Phix}}: syntax coloured)
Line 2,531:
 
=={{header|Phix}}==
<!--<lang Phix>include builtins/xml.e(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" />
< &lt;Student Name="ChadApril" Gender="MF" DateOfBirth="19911989-0501-0602" />&gt;
< &lt;Student Name="DaveBob" Gender="M" DateOfBirth="19921990-0703-0804"> /&gt;
< &lt;Student Name="AprilChad" Gender="FM" DateOfBirth="19891991-0105-0206" />&gt;
<Pet Type="dog" Name="Rover" />
< &lt;Student Name="BobDave" Gender="M" DateOfBirth="19901992-0307-0408" />&gt;
</Student>
<Student DateOfBirth="1993-09-10" Gender &lt;Pet Type="Fdog" Name="&#x00C9;milyRover" />&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}}
(noteNote 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>
"April"
7,806

edits