Given the following XML fragment, extract the list of student names using whatever means desired. If the only viable method is to use XPath, refer the reader to the task XML and XPath.

<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>
Expected Output

April
Bob
Chad
Dave
Émily

 
/** ==== Definitions ===== **/
DEFINE VARIABLE chXMLString AS LONGCHAR NO-UNDO.
DEFINE TEMP-TABLE ttStudent NO-UNDO XML-NODE-NAME 'Student'
    FIELD StudentName AS CHARACTER XML-NODE-TYPE 'attribute' XML-NODE-NAME 'Name'        LABEL 'Name'
    FIELD Gender      AS CHARACTER XML-NODE-TYPE 'attribute' XML-NODE-NAME 'Gender'      LABEL 'Gender'
    FIELD DateOfBirth AS CHARACTER XML-NODE-TYPE 'attribute' XML-NODE-NAME 'DateOfBirth' LABEL 'Date Of Birth'.
DEFINE DATASET dsStudents XML-NODE-NAME 'Students' FOR ttStudent.
 
/** ==== Main block ====**/
 
/** ASSIGN the XML string with the XML data.. **/ 
chXMLString = '<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>'.
 
/** Read the string into the dataset...**/
DATASET dsStudents:READ-XML('LONGCHAR', chXMLString, 'EMPTY',?,?).
 
/** Loop thought each temp-table record to produce the results...**/
FOR EACH ttStudent:
    DISPLAY ttStudent.StudentName.
END.
 
 