|
Extracting attribute values from XML elements |
|
|
In addition to common XML-element handling SAX allows access
to their attributes. Since XML-attributes are placed in the
openning tag of XML-elements, handler can access them in it
start-element method.
The set of attributes is representes by a map object, from
which any attribute-value can be taken by its name:
<!-- file: sample.xml -->
<?xml version="1.0"?>
<!--
All XML elements may have attributes.
Sometimes it is more comfortable to use an attribute
instead of nested element.
-->
<purchase-order date="2005-10-31" number="12345">
<purchased-by name="My name">
<!--
since address may be too complex for attribute
value, we place it to a dedicated element
-->
<address>My address</address>
</purchased-by>
<order-items>
<!--
here is an example of empty element
i.e. containing no nested elements
-->
<item code="687" type="CD" label="Some music" />
<item code="129851" type="DVD" label="Some video"/>
</order-items>
</purchase-order>
import javax.xml.parsers.SAXParser;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
import javax.xml.parsers.SAXParserFactory;
/**
* Here is sample of reading attributes of a given XML element.
*/
public class SampleOfReadingAttributes {
/**
* Application entry point
* @param args command-line arguments
*/
public static void main(String[] args) {
try {
// creates and returns new instance of SAX-implementation:
SAXParserFactory factory = SAXParserFactory.newInstance();
// create SAX-parser...
SAXParser parser = factory.newSAXParser();
// .. define our handler:
SaxHandler handler = new SaxHandler();
// and parse:
parser.parse("sample.xml", handler);
} catch (Exception ex) {
ex.printStackTrace(System.out);
}
}
/**
* Our own implementation of SAX handler reading
* a purchase-order data.
*/
private static final class SaxHandler extends DefaultHandler {
// we enter to element 'qName':
public void startElement(String uri, String localName,
String qName, Attributes attrs) throws SAXException {
if (qName.equals("purchase-order")) {
// order date value as String:
String date = attrs.getValue("date");
// order number as a String:
String number = attrs.getValue("number");
System.out.println("Order #" + number + " date is '" +
date + "'");
}
}
}
}
|
Related Tips
|
Page 1 of 0 ( 0 comments )
You can share your information about this topic using the form below!
Please do not post your questions with this form! Thanks.