Entering content frame

Process documentation Traversing Locate the document in its SAP Library structure

Purpose

You can traverse the tree structure, representing the XML document, if you want to access the XML document directly.

Process Flow

The basic classes for traversing a document are listed below:

·        org.w3c.dom.Node

·        org.w3c.dom.Element

·        org.w3c.dom.Text

·        org.w3c.dom.Comment

·        org.w3c.dom.Document

·        org.w3c.dom.NodeList

·        org.w3c.dom.NamedNodeMap

Example

The following examples clarify the process of traversing a tree structure:

Example

public void traverse1(Node node) {

    do {

       System.out.println("Node: name=" + node.getNodeName() +

       ", value=" + node.getNodeValue() + ", type=" +

       node.getNodeType());

       if (node.getFirstChild() != null) {

        System.out.println("Processing children:");

        traverse1(node.getFirstChild());

      }

    }  while ((node = node.getNextSibling()) != null);

  }

 

This graphic is explained in the accompanying text

public void traverse2(Node node) {

    //Get the children of this Node

      NodeList children = node.getChildNodes();

   

      //go through all the children of the node

      for (int i=0; i<children.getLength(); i++) {

         //get the next child

         Node child = children.item(i);

         //get the type of the child

         short childType = child.getNodeType();

         if (childType == Node.ELEMENT_NODE) {

        //if the child is an Element then print the start and end

        //tags and recurse the content       

        String nodeName = child.getNodeName();

        System.out.print("<" + nodeName + ">");

        traverse2(child);

        System.out.print("</" + nodeName + ">");

      } else if (childType == Node.TEXT_NODE) {

        //if the child is a Text node just print the text content

        String data = child.getNodeValue();

        System.out.print(data);

    }

    }

  }

 

Example

public void traverse3(Node node, int indent) {

    for (int i = 0; i < indent; i++) {

      System.out.print("   ");

    }

    int type = node.getNodeType();

    switch (type) {

    case Node.ATTRIBUTE_NODE:

      System.out.println("ATTRIBUTE_NODE");

      break;

    case Node.CDATA_SECTION_NODE:

      System.out.println("CDATA_SECTION_NODE");

      break;

    case Node.COMMENT_NODE:

      System.out.println("COMMENT_NODE");

      break;

    case Node.DOCUMENT_FRAGMENT_NODE:

      System.out.println("DOCUMENT_FRAGMENT_NODE");

      break;

    case Node.DOCUMENT_NODE:

      System.out.println("DOCUMENT_NODE");

      break;

    case Node.DOCUMENT_TYPE_NODE:

      System.out.println("DOCUMENT_TYPE_NODE");

      break;

    case Node.ELEMENT_NODE:

      System.out.println("ELEMENT_NODE");

      NamedNodeMap atts = node.getAttributes();

      for (int i = 0; i < atts.getLength(); i++) {

        Node att = atts.item(i);

        traverse3(att, indent + 1);

      }

      break;

    case Node.ENTITY_NODE:

      System.out.println("ENTITY_NODE");

      break;

    case Node.ENTITY_REFERENCE_NODE:

      System.out.println("ENTITY_REFERENCE_NODE");

      break;

    case Node.NOTATION_NODE:

      System.out.println("NOTATION_NODE");

      break;

    case Node.PROCESSING_INSTRUCTION_NODE:

      System.out.println("PROCESSING_INSTRUCTION_NODE");

      break;

    case Node.TEXT_NODE:

      System.out.println("TEXT");

      break;

    default:

      System.out.println("???");

      break;

    }

    for (Node c = node.getFirstChild(); c != null; c =

    c.getNextSibling()) {

      traverse3(c, indent + 1);

    }

  }

 

 

 

Leaving content frame