XML/Input: Difference between revisions

Content added Content deleted
(PascalABC.NET)
(Added OmniMark solution)
Line 2,788: Line 2,788:
parse p xml_str;
parse p xml_str;
final p;</syntaxhighlight>
final p;</syntaxhighlight>

=={{header|OmniMark}}==

OmniMark′s pedigree was SGML processing. XML processing uses similar principles, with the OmniMark script taking two input files: first, a DTD defining the structure, and second, the XML data.

''The DTD'' — '''XML-input.dtd'''
<syntaxhighlight lang="dtd">
<!DOCTYPE Students [

<!ELEMENT Students (Student)+ >

<!ELEMENT Student (Pet)* >
<!ATTLIST Student
Name CDATA #REQUIRED
Gender CDATA #REQUIRED
DateOfBirth CDATA #REQUIRED >

<!ELEMENT Pet EMPTY >
<!ATTLIST Pet
Type CDATA #REQUIRED
Name CDATA #REQUIRED >

]></syntaxhighlight>

''The XML'' — '''XML-input.xml'''
<syntaxhighlight lang="dtd">
<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
<Student Name="Bob" Gender="M" DateOfBirth="1990-03-04" />
<Student Name="Chad" Gender="M" DateOfBirth="1991-05-06" />
<Student Name="Dave" Gender="M" DateOfBirth="1992-07-08">
<Pet Type="dog" Name="Rover" />
</Student>
<Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" />
</Students>
</syntaxhighlight>

''The OmniMark script'' — '''XML-input.xom'''
<syntaxhighlight lang="omnimark">
process
local stream students-dtd initial {file 'XML-input.dtd'}
local stream students-xml initial {file 'XML-input.xml'}

do xml-parse document
scan students-dtd || students-xml
output "%c"
done

element Student
output "%v(Name)%n"
suppress

element #implied ; all other elements can be suppressed, except <Students>
output '%c' when element is Students
suppress when element isnt Students
</syntaxhighlight>

''The commandline''
<pre>
omnimark.exe -sb XML-input.xom -of XML-input.out.txt
</pre>

''The output'' — '''XML-input.out.txt'''
<pre>
April
Bob
Chad
Dave
Émily
</pre>


=={{header|OpenEdge ABL/Progress 4GL}}==
=={{header|OpenEdge ABL/Progress 4GL}}==