/// <summary> /// Imports a PNML document and converts it to a PetriNet instance. /// </summary> /// <param name="document">An instance of PnmlDocument to import.</param> /// <returns>An instance of PetriNet that represents the Petri Net extracted from the document.</returns> public PetriNet Import(PersistentDocument document) { var petriNet = new PetriNet(); // Loading PNML document content. var xDocument = GetXmlDocumentFromPnmlDocument(document); // Loading Places and Transitions. var nonArcElements = xDocument.Element("pnml").Element("net").Elements().Where(element => element.Name != "arc"); foreach (var xPNElement in nonArcElements) { switch (xPNElement.Name.ToString()) { case "place": var place = GetPlaceObjectFromPnmlElement(xPNElement); if (place != null) { petriNet.Elements.Add(place); } break; case "transition": var transition = GetTransitionObjectFromPnmlElement(xPNElement); if (transition != null) { petriNet.Elements.Add(transition); } break; } } // Loading Arcs. var arcElements = xDocument.Element("pnml").Element("net").Elements().Where(element => element.Name == "arc"); foreach (var xArcElement in arcElements) { var arc = GetArcObjectFromPnmlElement(petriNet, xArcElement); if (arc != null) { petriNet.Elements.Add(arc); } } petriNet.UpdateElementRelationships(); return petriNet; }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PersistentDocument obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
/// <summary> /// Converts the PnmlDocument to XDocument. /// </summary> /// <param name="document">An instance of PnmlDocument to convert to XML.</param> /// <returns>An instance of XDocument containing the PNML document.</returns> private static XDocument GetXmlDocumentFromPnmlDocument(PersistentDocument document) { XDocument xDocument; if (document is PnmlDocument) { xDocument = (document as PnmlDocument).XmlDocument; } else { using (StringReader reader = new StringReader(document.GetContent())) { xDocument = XDocument.Load(reader); } } return xDocument; }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PersistentDocument obj) { return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; }