//Arrange from oldest to newest public NonDerivativeTransaction[] SortByTransactionDate(NonDerivativeTransaction[] all) { List <NonDerivativeTransaction> ToReturn = new List <NonDerivativeTransaction>(); List <NonDerivativeTransaction> ToPullFrom = new List <NonDerivativeTransaction>(); ToPullFrom.AddRange(all); while (ToPullFrom.Count > 0) { NonDerivativeTransaction winner = ToPullFrom[0]; foreach (NonDerivativeTransaction ndt in ToPullFrom) { if (ndt.TransactionDate.Value < winner.TransactionDate.Value) { winner = ndt; } } ToReturn.Add(winner); ToPullFrom.Remove(winner); } return(ToReturn.ToArray()); }
public static StatementOfBeneficialOwnership ParseXml(string xml) { StatementOfBeneficialOwnership ToReturn = new StatementOfBeneficialOwnership(); //Load the xml XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); //Get the ownership document node that contains all data XmlNode doc_data = doc.SelectSingleNode("ownershipDocument"); //Get schema version if (doc_data.SelectSingleNode("schemaVersion") != null) { ToReturn.SchemaVersion = doc_data.SelectSingleNode("schemaVersion").InnerText; } else { ToReturn.SchemaVersion = null; } //Get period of report ToReturn.PeriodOfReport = DateTime.Parse(doc_data.SelectSingleNode("periodOfReport").InnerText); //documentType XmlNode node_documentType = doc_data.SelectSingleNode("documentType"); if (node_documentType != null) { ToReturn.DocumentType = node_documentType.InnerText.Trim(); } else { ToReturn.DocumentType = null; } #region "Issuer" XmlNode issuer = doc_data.SelectSingleNode("issuer"); //CIK ToReturn.IssuerCik = issuer.SelectSingleNode("issuerCik").InnerText; //Issuer name ToReturn.IssuerName = issuer.SelectSingleNode("issuerName").InnerText; //Issuer trading symbol ToReturn.IssuerTradingSymbol = issuer.SelectSingleNode("issuerTradingSymbol").InnerText; #endregion #region "Owner" //Get the reporting owner node XmlNode node_reportingowner = doc_data.SelectSingleNode("reportingOwner"); //Reporting owner id data XmlNode node_reportingOwnerId = node_reportingowner.SelectSingleNode("reportingOwnerId"); ToReturn.OwnerCik = node_reportingOwnerId.SelectSingleNode("rptOwnerCik").InnerText; ToReturn.OwnerName = node_reportingOwnerId.SelectSingleNode("rptOwnerName").InnerText; //Reporting owner address data XmlNode node_reportingOwnerAddress = node_reportingowner.SelectSingleNode("reportingOwnerAddress"); ToReturn.OwnerStreet1 = node_reportingOwnerAddress.SelectSingleNode("rptOwnerStreet1").InnerText; ToReturn.OwnerStreet2 = node_reportingOwnerAddress.SelectSingleNode("rptOwnerStreet2").InnerText; ToReturn.OwnerCity = node_reportingOwnerAddress.SelectSingleNode("rptOwnerCity").InnerText; ToReturn.OwnerStateCode = node_reportingOwnerAddress.SelectSingleNode("rptOwnerState").InnerText; ToReturn.OwnerZipCode = node_reportingOwnerAddress.SelectSingleNode("rptOwnerZipCode").InnerText; //Owner relationship XmlNode node_reportingOwnerRelationship = node_reportingowner.SelectSingleNode("reportingOwnerRelationship"); //Owner is officer (this is sometimes called "Director") XmlNode node_isOfficer = node_reportingOwnerRelationship.SelectSingleNode("isOfficer"); XmlNode node_isDirector = node_reportingOwnerRelationship.SelectSingleNode("isDirector"); if (node_isOfficer != null) { string owner_is_officer_val = node_reportingOwnerRelationship.SelectSingleNode("isOfficer").InnerText; if (owner_is_officer_val == "0") { ToReturn.OwnerIsOfficer = false; } else if (owner_is_officer_val == "1") { ToReturn.OwnerIsOfficer = true; } } else if (node_isDirector != null) //If the isOfficer node was null, check for the isDirector node instead. { string owner_is_officer_val = node_reportingOwnerRelationship.SelectSingleNode("isDirector").InnerText; if (owner_is_officer_val == "0") { ToReturn.OwnerIsOfficer = false; } else if (owner_is_officer_val == "1") { ToReturn.OwnerIsOfficer = true; } } else //If we couldn't find a relevant tag, just say they are not an officer { ToReturn.OwnerIsOfficer = false; } //Get the officer title (this will only be there if this person is an officer) if (ToReturn.OwnerIsOfficer) { XmlNode node_officerTitle = node_reportingOwnerRelationship.SelectSingleNode("officerTitle"); if (node_officerTitle != null) { ToReturn.OwnerOfficerTitle = node_reportingOwnerRelationship.SelectSingleNode("officerTitle").InnerText; } else { ToReturn.OwnerOfficerTitle = null; } } else { ToReturn.OwnerOfficerTitle = null; } #endregion #region "Non Derivative table" XmlNode node_nonDerivativeTable = doc_data.SelectSingleNode("nonDerivativeTable"); if (node_nonDerivativeTable != null) { List <NonDerivativeTransaction> transactions = new List <NonDerivativeTransaction>(); foreach (XmlNode node_nonDerivativeEntry in node_nonDerivativeTable.ChildNodes) { NonDerivativeTransaction ndt = new NonDerivativeTransaction(); ndt.LoadFromNode(node_nonDerivativeEntry); transactions.Add(ndt); } ToReturn.NonDerivativeTransactions = transactions.ToArray(); } #endregion #region "Derivative table" XmlNode node_derivativeTable = doc_data.SelectSingleNode("derivativeTable"); if (node_derivativeTable != null) { List <DerivativeTransaction> DTs = new List <DerivativeTransaction>(); foreach (XmlNode node_derivativeTransaction in node_derivativeTable.ChildNodes) { DerivativeTransaction dt = new DerivativeTransaction(); dt.LoadFromNode(node_derivativeTransaction); DTs.Add(dt); } ToReturn.DerivativeTransactions = DTs.ToArray(); } #endregion return(ToReturn); }