To show you how to read attribute values from an XML document, I'll read the value of the ATTENDANCE attribute of the third person in the XML document ch07_01.xml: <?xml version="1.0"?> <MEETINGS> <MEETING TYPE="informal"> <MEETING_TITLE>XML In The Real World</MEETING_TITLE> <MEETING_NUMBER>2079</MEETING_NUMBER> <SUBJECT>XML</SUBJECT> <DATE>6/1/2003</DATE> <PEOPLE> <PERSON ATTENDANCE="present"> <FIRST_NAME>Edward</FIRST_NAME> <LAST_NAME>Samson</LAST_NAME> </PERSON> <PERSON ATTENDANCE="absent"> <FIRST_NAME>Ernestine</FIRST_NAME> <LAST_NAME>Johnson</LAST_NAME> </PERSON> <PERSON ATTENDANCE="present"> <FIRST_NAME>Betty</FIRST_NAME> <LAST_NAME>Richardson</LAST_NAME> </PERSON> </PEOPLE> </MEETING> </MEETINGS> How do you read attribute values? You start by getting a named node map object of the attributes of the current element using that element's attributes property. In this case, we want the attributes of the third <PERSON> element, and we get a named node map of those attributes like this: <HTML> <HEAD> <TITLE> Reading attribute values from XML documents </TITLE> <XML ID="meetingsXML" SRC="ch07_01.xml"></XML> <SCRIPT LANGUAGE="JavaScript"> function readXMLDocument() { var xmldoc, meetingsNode, meetingNode, peopleNode var first_nameNode, last_nameNode, outputText var attributes xmldoc= document.all("meetingsXML").XMLDocument meetingsNode = xmldoc.documentElement meetingNode = meetingsNode.firstChild peopleNode = meetingNode.lastChild personNode = peopleNode.lastChild first_nameNode = personNode.firstChild last_nameNode = first_nameNode.nextSibling attributes = personNode.attributes . . . </HTML> Now I can recover the actual node for the ATTENDANCE node with the named node map object's getNamedItem method: attributes = personNode.attributes attendancePerson = attributes.getNamedItem("ATTENDANCE") . . . Now I have a node corresponding to the ATTENDANCE attribute, and I can get the value of that attribute using the value property (attribute nodes don't have internal text nodes): attributes = personNode.attributes attendancePerson = attributes.getNamedItem("ATTENDANCE") outputText = first_nameNode.firstChild.nodeValue + ' ' + last_nameNode.firstChild.nodeValue + " is " + attendancePerson.value messageDIV.innerHTML=outputText . . . And that's all it takes. Here's what the whole listing looks like: Listing ch07_05.html<HTML> <HEAD> <TITLE> Reading attribute values from XML documents </TITLE> <XML ID="meetingsXML" SRC="ch07_01.xml"></XML> <SCRIPT LANGUAGE="JavaScript"> function readXMLDocument() { var xmldoc, meetingsNode, meetingNode, peopleNode var first_nameNode, last_nameNode, outputText var attributes, attendancePerson xmldoc = document.all("meetingsXML").XMLDocument meetingsNode = xmldoc.documentElement meetingNode = meetingsNode.firstChild peopleNode = meetingNode.lastChild personNode = peopleNode.lastChild first_nameNode = personNode.firstChild last_nameNode = first_nameNode.nextSibling attributes = personNode.attributes attendancePerson = attributes.getNamedItem("ATTENDANCE") outputText = first_nameNode.firstChild.nodeValue + ' ' + last_nameNode.firstChild.nodeValue + " is " + attendancePerson.value messageDIV.innerHTML=outputText } </SCRIPT> </HEAD> <BODY> <CENTER> <H1> Reading attribute values from XML documents </H1> <INPUT TYPE="BUTTON" VALUE="Get attendance of the third person" ONCLICK="readXMLDocument()"> <P> <DIV ID="messageDIV"></DIV> </CENTER> </BODY> </HTML> You can see the results in Figure 7-3, where you see that the attendance of the third person is "present." Figure 7-3. Reading attributes in Internet Explorer.
|