public void WriteXml(string path, RomMetadata romMetadata, IList<Table2D> list2D, IList<Table3D> list3D)
{
XmlTextWriter xw = new XmlTextWriter (path, System.Text.Encoding.UTF8);
// necessary, otherwise single line
xw.Formatting = Formatting.Indented;
var table2DXElements = list2D.Where (t => t.HasMetadata).OrderBy (t => t.Location).Select (t => GetXElement (t)).AsParallel ();
var table3DXElements = list3D.Where (t => t.HasMetadata).OrderBy (t => t.Location).Select (t => GetXElement (t)).AsParallel ();
XElement romEl = new XElement (X_rom, romMetadata.XElement, TableSearchXElement (), table2DXElements, table3DXElements);
XDocument doc = XDoc (romEl);
doc.WriteTo (xw);
xw.Close ();
}