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

# Package Glib.XML

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

- Glib.XML Types
- Glib.XML Subprograms

## 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]