Name: Jeffry Hartono
Class/Project: CSCIE-259/Project2
Due Date: November 15, 2007
Address: 5029 Sheboygan Ave #115, Madison WI 53705
1A.
/students/student/name/last/text()[substring(., 1, 1) = 'B']/../../..
1B.
/students/student[substring(name/last, 1, 1) = 'B' and GPA >= 3.7]
2A.
2 nodes (students, student[@id = 55])
2B.
5 nodes (student[@id = 1], student[@id = 1]/name, student[@id = 1]/name/first, student[@id = 1]/name/last, student[@id = 1]/GPA)
2C.
/preceding::*[4]
or /preceding::*[position() = 4]
2D.
following::* --> 1 node (student[@id = 55]/GPA)
following::node() --> 5 nodes (text() - between the closing tag of name element and the open tag of GPA element, student[@id = 55]/GPA,
student[@id = 55]/GPA/text() - 3.8, text() - between the closing tag of GPA element and the closing tag of student[@id = 55] element,
text() - between the the closing tag of student[@id = 55] element and students element).
The fundamental difference between the two expressions is that node() will match/return any kind of node [text node, comment node,
processing-instruction node, element/regular node]; while * will only match/return element/regular node only.
2E.
/students//name[last = 'Bond']/../@id