Nif Format/NifTools XML Format

From NifTools
(Difference between revisions)
Jump to: navigation, search
(Added a bit more information.)
m (<niftoolsxml>: Fixed example and moved it to the end of the tag entry.)
Line 66: Line 66:
| '''version''' || #.#.#.# || Used to specify the version of the NifTools XML format being used.
| '''version''' || #.#.#.# || Used to specify the version of the NifTools XML format being used.
&lt;niftoolsxml version=""&gt;&lt;niftoolsxml&gt;
'''Tags Which can appear inside this one:'''
'''Tags Which can appear inside this one:'''
&lt;version&gt;, &lt;basic&gt;, &lt;enum&gt;, &lt;compound&gt;, and &lt;niobject&gt;
&lt;version&gt;, &lt;basic&gt;, &lt;enum&gt;, &lt;compound&gt;, and &lt;niobject&gt;
&lt;niftoolsxml version=""&gt;&lt;/niftoolsxml&gt;

Revision as of 20:25, 8 September 2006

The NifTools XML format is used to describe the NIF, KF, and KFM file formats. NifSkope uses this file directly and almost any new discoveries about the format can be enabled in NifSkope by editing the nif.xml file included in its install directory. Niflib uses the XML file as well; Python scripts read the XML file and generate some of the source code used by Niflib to read and write NIF files. The XML files also contain our human-readable documentation of the format, and will eventually serve as the source for a new HTML version of the file format specification. Thus, these XML files are central to our efforts to understand the file formats and create tools that support as many games as possible.


The Basics

If you've never heard of XML before, you may want to check out a few of these informational links borrowed from Wikipedia:

If you've ever worked with HTML, XML will look very familiar to you. Basically, instead of working with tags like <B>, <IMG>, and <TABLE>, you will be working with special tags designed to describe the NIF file format such as <basic>, <compound>, and <niobject>.

Every XML file starts with a basic heading. Following is the heading for the NifTools XML format. It doesn't really do anything important other than tell you that this document is in the NifTools XML format, and it has to be there:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE niftoolsxml>
<niftoolsxml version="">

   XML File contents go here


Also, like in HTML, plain text can appear between the start and end version of a tag. Similarly, plain text enclosed in NifTools XML tags contains the human readable documentation about what this NIF structure does. This is completely plain text... no HTML tags are allowed. Here's an example:

<add name="Name" type="string">
  Name of this object. This is also the name of the action associated with this file.
  For instance, if the original NIF file is called &quot;demon.nif&quot; and this
  animation file contains an attack sequence, then the file would be called
  &quot;demon_attack1.kf&quot; and this field would contain the string &quot;attack1&quot;.

There are also certain characters which are not allowed in XML plain text. These must be replaced with special codes. Some examples:

Character Replace with this
" &quot;
< &lt;
> &gt;
& &amp;


The NIF XML file is divided into sections based around the five main tags. These are; <version>, <basic>, <enum>, <compound>, and <niobject>. At the top of each section is an XML comment. Just like in HTML, a comment is text that is ignored by the program reading the XML file. For example:

<!--This text is for informational use and will be ignored by NifSkope-->


This section will introduce each tag and explain how to use it. Tags which appear inside other tags will be grouped under the tag which they are most likely to appear inside of


The <niftoolsxml> tag is the root tag, and everything else in the file goes inside it. There is exactly one of these tags in a NifTools XML document. This is similar to the way the <HTML> tag works for HTML documents.


Name Format Description
version #.#.#.# Used to specify the version of the NifTools XML format being used.

Tags Which can appear inside this one:

<version>, <basic>, <enum>, <compound>, and <niobject>


<niftoolsxml version=""></niftoolsxml>







Personal tools