# opaxmlgenerate

(Linux) Takes comma-separated-values (CSV) data as input and generates sequences of XML containing user-specified element names and element values within start and end tag specifications. Use this tool to create an XML representation of fabric data from its CSV form.

## Syntax

    opaxmlgenerate [-v] [-d delimiter] [-i number] [-g element]
    [-h element] [-e element] [-X input_file] [-P param_file]

## Options

`--help`

  Produces full help text.

`-g/--generate element`

  Generates value for `element` using value in next field from the input file. Can be used multiple times on the command line. Values are assigned to elements in order.

`-h/--header element`

  Name of the XML element that is the enclosing header start tag.

`-e/--end element`

  Name of the XML element that is the enclosing header end tag.

`-d/--delimit delimiter`

  Specifies the delimiter character that separates values in the input file. Default is semicolon.

`-i/--indent number`

  Number of spaces to indent each level of XML output. Default is 0.

`-X/--infile input_file`

  Generates XML from CSV in input_file. One record per line with fields in each record separated by the specified delimiter.

`-P/--pfile param_file`

  Uses input command line options (parameters) from `param_file`.

`-v/--verbose`

  Produces verbose output. Includes output progress reports during extraction.

## Details

`opaxmlgenerate` takes the CSV data from an input file. It generates fragments of XML, and in combination with a script, can be used to generate complete XML sequences. `opaxmlgenerate` does not use nor require a connection to an Intel® Omni-Path Fabric.

`opaxmlgenerate` reads CSV element values and applies element (tag) names to those values. The element names are supplied as command line options to the tool and constitute a template that is applied to the input.

Element names on the command line are of three (3) types, distinguished by their command line option - `Generate`, `Header`, and `Header_End`. The `Header` and `Header_End` types together constitute enclosing element types. Enclosing elements do not contain a value, but serve to separate and organize Generate elements.

Generate elements, along with a value from the CSV input file, cause XML in the form of `<element_name>value</element_name>` to be generated. Generate elements are normally the majority of the XML output since they specify elements containing the input values. Header elements cause an XML header start tag of the form: `<element_name>` to be generated. Header_End elements cause an XML header end tag of the form `</element_name>` to be generated. Output of enclosing elements is controlled entirely by the placement of those element types on the command line. `opaxmlgenerate` does not check for matching start and end tags or proper nesting of tags.

Options (parameters) to `opaxmlgenerate` can be specified on the command line, with a parameter file, or both. A parameter file is specified with `-P param_file`. When a parameter file specification is encountered on the command line, option processing on the command line is suspended, the parameter file is read and processed entirely, and then command line processing is resumed. Option syntax within a parameter file is the same as on the command line. Multiple parameter file specifications can be made, on the command line or within other parameter files. At each point that a parameter file is specified, current option processing is suspended while the parameter file is processed, then resumed. Options are processed in the order they are encountered on the command line or in parameter files. A parameter file can be up to 8192 bytes in size and may contain up to 512 parameters.

## Using opaxmlgenerate to Create Topology Input Files

`opaxmlgenerate` can be used to create scripts to translate from user-specific format into the `opareport topology_input` file format. `opaxmlgenerate` itself works against a CSV style file with one line per record. Given such a file it can produce hierarchical XML output of arbitrary complexity and depth.

The typical flow for a script which translates from a user-specific format into `opareport topology_input` would be:

- As needed, reorganize the data into link and node data CSV files, in a sequencing similar to that used by `opareport topology_input`. One link record per line in one temporary file, one node record per line in another temporary file and one SM per line in a third temporary file.

- The script must directly output the boilerplate for XML version, etc.

- `opaxmlgenerate` can be used to output the Link section of the topology_input, using the link record temporary file.
- `opaxmlgenerate` can be used to output the Node sections of the topology_input using the node record temporary file. If desired, there could be separate node record temporary files for HFIs and Switches.
- `opaxmlgenerate` can be used to output the SM section of the topology_input, if desired.

- The script must directly output the closing XML tags to complete the topology_input file.