Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Better, Faster XML Processing with VTD-XML : Page 4

VTD-XML is a new open source XML processing API that provides a great alternative to SAX and DOM that doesn't force you to trade processing performance for usability. Find out why this Java-based, non-validating parser is faster than DOM and better than SAX.




Building the Right Environment to Support AI, Machine Learning and Deep Learning

A Sample Project
So far, you have had a high-level overview of VTD-XML. Now it's time to put it into action and demonstrate some of its important concepts and features. The following examples use a ProductDetails.xml file, whose content is shown below.

<?xml version='1.0'?> <Products> <Product ID="1" Name="Chai" Price="13"> <Desc Value="10 boxes x 20 Bags"/> </Product> <Product ID="2" Name="Chang" Price="10"> <Desc Value="24 -12 oz bottles"/> </Product> <Product ID="3" Name="Tofu" Price="23.25"> <Desc Value="40-100 kg pkgs"/> </Product> </Products>

The sample code parses the file using VTDGen, navigates the hierarchy using VTDNav, and then performs a simple element node iteration using AutoPilot. Also you will see how to incrementally update the content of this XML file.

For this project, create a Java class named project1.java, which only has a main() method. To handle all possible exceptions, the code uses a single try/catch block wrapped around the application logic.

try { // application logic goes here } catch (ParseException e){ System.out.println( " XML file parsing error \n"+e); } catch (NavException e){ System.out.println( " Exception during navigation "+e); } catch (java.io.IOException e) { System.out.println(" IO exception condition"+e); }

The following code snippet reads the file content into a buffer, and then generates a parsed representation for ProductDetails.xml.

// parse XML File f = new File("ProductDetails.xml"); FileInputStream fis = new FileInputStream(f); // find out file length and allocate buffer byte[] b = new byte[(int) f.length()]; // read file content into the buffer fis.read(b); //create an instance of VTDGen VTDGen vg = new VTDGen(); // assign the buffer to VTDGen vg.setDoc(b); // parse with namespace awareness turned off vg.parse(false);

Next, it obtains an instance of VTDNav from VTDGen and moves the cursor to a child element named product whose id attribute equals "3."

// manual navigation // get the navigator VTDNav vn = vg.getNav(); // verify the root element name if (vn.matchElement("Products")){ // move the cursor to first child // named "product" if (vn.toElement( VTDNav.FIRST_CHILD,"Product")) { // stepping across every sibling // named "Product" do { int i = vn.getAttrVal("ID"); if (vn.matchRawTokenString(i,"3")) { System.out.println("element name ==>" + vn.toString(vn.getCurrentIndex())); System.out.println( "element fragement is ==>"); // then print out element fragment // using getElementFragment(); long l = vn.getElementFragment(); int len = (int) (l>>32); int offset = (int) l; System.out.println(new String( b,offset, len)); } } while(vn.toElement( VTDNav.NEXT_SIBLING,"Product")); } else System.out.println("no child named Product"); }

The output from executing the code snippet above is shown below.

element name ==> Product element fragment is ==> <Product ID="3" Name="Tofu" Price="23.25"> <Desc Value="40-100 kg pkgs"/> </Product>

Next, the cursor gets reset to the root, then the code creates an instance of AutoPilot to iterate through all elements of the name "Desc."

// iterate over element using AutoPilot vn.toElement(VTDNav.ROOT); AutoPilot ap = new AutoPilot(vn); ap.selectElement("Desc"); //select "Desc" while(ap.iterate()) { long l = vn.getElementFragment(); int len = (int) (l>>32); int offset = (int) l; System.out.println(new String(b,offset,len)); }

And its corresponding output looks like this:

<Desc Value="10 boxes x 20 Bags"/> <Desc Value="24 -12 oz bottles"/> <Desc Value="40-100 kg pkgs"/>

Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date