[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


Package Glib.XML

This package provides a simple minded XML parser to be used with Gate.

Types

type Free_Specific_Data is access procedure 
    (Data : in out XML_Specific_Data);




type Node is record
    Tag   : String_Ptr;
      -- The name of this node
    
    Attributes   : String_Ptr;
      -- The attributes of this node
    
    Value : String_Ptr;
      -- The value, or null is not relevant
    
    Parent : Node_Ptr;
      -- The parent of this Node.
    
    Child : Node_Ptr;
      -- The first Child of this Node. The next child is Child.Next
    
    Next  : Node_Ptr;
      -- Next "brother" node.
    
    Specific_Data : XML_Specific_Data;
      -- Use to store data specific to each implementation (e.g a boolean
      -- indicating whether this node has been accessed)
    end record;

A node of the XML tree. Each time a tag is found in the XML file, a new node is created, that points to its parent, its children and its siblings (nodes at the same level in the tree and with the same parent).


type Node_Ptr is access all Node;

Pointer to a node of the XML tree.


type XML_Specific_Data is private;

The type of the extra data that can be attached to each node of the XML tree. See for instance the package Glib.Glade.


Subprograms

function Parse                 
  (File               :        String)
   return Node_Ptr;

Parse File and return the first node representing the XML file.


procedure Print                
  (N                  :        Node_Ptr;
   Indent             :        Natural := 0;
   File_Name          :        String := "");

Write the tree starting with N into a file File_Name. The generated
file is valid XML, and can be parsed with the Parse function. If File_Name is the empty string, then the tree is printed on the standard output


function Find_Tag              
  (N                  :        Node_Ptr;
   Tag                :        String)
   return Node_Ptr;

Find a tag Tag in N and its brothers.


function Get_Field             
  (N                  :        Node_Ptr;
   Field              :        String)
   return String_Ptr;

Return the value of the field 'Field' if present in the children of N.
Return null otherwise.


procedure Add_Child            
  (N                  :        Node_Ptr;
   Child              :        Node_Ptr);

Add a new child to a node.


function Deep_Copy             
  (N                  :        Node_Ptr)
   return Node_Ptr;

Return a deep copy of the tree starting with N. N can then be freed
without affecting the copy.


procedure Free                 
  (N                  : in out Node_Ptr;
   Free_Data          :        Free_Specific_Data := null);

Free the memory allocated for a node and its children.
It also disconnects N from its parent. If Free_Data is not null, it is used to free the memory occupied by the Specific_Data for each node.


function Get_Attribute         
  (N                  : in     Node_Ptr;
   Attribute_Name     : in     String)
   return String_Ptr;

Return the value of the attribute 'Attribute_Name' if present.
Return null otherwise.



[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]