Use XmlWorker and XmlNode

Documents for the development of and with JVx.

Use XmlWorker and XmlNode

Postby Development@SIB » Fri Dec 07, 2012 1:08 pm

If you work with xml files it's not too easy to use the right parser because there are some of them and if you want a simple parser without writing a lot of source code you need some luck.

We added two classes to JVx that solves simple XML handling.

Example

XML file

Syntax: [ Download ] [ Hide ]
<?xml version="1.0" encoding="UTF-8"?>

<!-- Before begin! -->
<server>
 
  <leer/>
  <leer></leer>

  <!-- Test: STARTPORT -->
  <startport>2001</startport>
 
  <audio>off</audio>
  <serial>COM1</serial>
  <buttondelay>1000</buttondelay>

  <media>
    <directory>C:\Temp\smedia</directory>
  </media>

  <!-- Test: TCP information
      second row
      third row
 
 after an empty row
 -->
  <tcp>
    <bindaddress>0.0.0.0</bindaddress>
    <user>user</user>
    <pwd>password</pwd>
  </tcp>
 
  <db>
    <name>SERVER_1</name>
    <path>c:\temp\pbxdb</path>
    <user>user</user>
    <pwd>password</pwd>
  </db>
 
  <report name="Standard">
    <fontdirectory>C:\temp\pdffonts</fontdirectory>
    <format>pdf</format>
  </report>
 
  <report name="User">
    <fontdirectory>C:\temp\xlsfonts</fontdirectory>
    <format>xls</format>
  </report>
 
  <text>
  Hans
    <comment>Comment</comment>
  Huber
    <comment2>Comment2</comment2>
  Pauli
  </text>
 
  <text>This is a text
from Hansi Huber
  </text>
 
</server>
<!--  After End -->
 

Read/Insert/Set tags

Syntax: [ Download ] [ Hide ]
XmlWorker xmw = new XmlWorker();
XmlNode xmn = xmw.read("simple.xml");

//----------------------------
// Read nodes
//----------------------------

//Access a single TAG
xmn.getNodeValue("/server/media");
//Access a TAG from a list
xmn.getNodeValue("/server/report(1)/format")

//----------------------------
// Insert new nodes
//----------------------------

//quick inserts
xmn.insertNode("/server/report(0)", null);
xmn.setNode("/server/report(0)/format", "ABC");

xmn.insertNode("/server/startport(1)", "ABCD");

//with nodes
XmlNode xmnInsert = new XmlNode("ABCD");

xmnInsAttrib  = new XmlNode(XmlNode.TYPE_ATTRIBUTE, "attrib1", xmnInsert);
xmnInsAttrib.setValue("Attribut");

xmn.insertNode("/server/startport(1)", xmnInsert);

//----------------------------
// Set nodes
//----------------------------

xmn.setNode("/server/domain", "www.domain.com")

//----------------------------
// Save
//----------------------------

xmn.write("simple_new.xml", xmn);
 

It's easy to access and modify information in a XML file. We use '/' as spearator for navigate through the hierarchy and (n) to access tags from a list of tags.

There are more useful methods e.g. find the index of a tag in a list of tags. The following example creates a XML structure in memory.

Syntax: [ Download ] [ Hide ]
XmlNode xmn = XmlNode.createXmlDeclaration();
               
xmn.insertNode("/server/a/b/c", "A");
xmn.insertNode("/server/a/b/c", "B");
xmn.insertNode("/server/a/b/c", "A");
xmn.insertNode("/server/a/b/c", "B");
xmn.insertNode("/server/a/b/c", "A");
xmn.insertNode("/server/a/b(1)/c", "A");
xmn.insertNode("/server/a/b/b", "A");
               
XmlNode xmnSearch = xmnRead.getNode("/server/a/b(0)");

//returns 0
xmnSearch.indexOf("/c", "A", 0);
//returns 2
xmnSearch.indexOf("/c", "A", 1);
//returns 3
xmnSearch.indexOf("/c", "A", 3);
//returns 0
xmnSearch.indexOf("/b", "A", 0);

xmn.insertNode("/server/a/b(1)/1", "A");
xmn.insertNode("/server/a/b(2)/2", "A");
xmn.insertNode("/server/a(1)/b/3", "A");

//returns 0
xmn.indexOf("/server/a/b/b", "A", 0)
 

The <XmlNode>.toString() method returns the XML representation of the node and all sub nodes.
User avatar
Development@SIB
 
Posts: 311
Joined: Mon Sep 28, 2009 1:54 pm

Return to Documentation