コード例 #1
0
ファイル: Settings.cs プロジェクト: TheProjecter/st2funbeat
        internal static void WriteInstance(XmlDocument xmlDoc, XmlElement pluginNode)
        {
            if (instance == null)
            {
                //This can occur if a logbook could not be loaded, then ST is closed
                instance = new Settings();
            }
            XmlElement user = xmlDoc.CreateElement("User");
            XmlAttribute username = xmlDoc.CreateAttribute("username");
            username.Value = instance.User.Username;
            user.Attributes.Append(username);
            XmlAttribute password = xmlDoc.CreateAttribute("password");
            password.Value = instance.User.Password;
            user.Attributes.Append(password);

            XmlNode existing = pluginNode.SelectSingleNode(user.Name);
            if (existing == null)
                pluginNode.AppendChild(user);
            else
                pluginNode.ReplaceChild(user, existing);

            XmlElement login = xmlDoc.CreateElement("Login");
            XmlAttribute loginId = xmlDoc.CreateAttribute("loginId");
            loginId.Value = instance.User.LoginId;
            login.Attributes.Append(loginId);
            XmlAttribute loginSecret = xmlDoc.CreateAttribute("loginSecret");
            loginSecret.Value = instance.User.LoginSecret;
            login.Attributes.Append(loginSecret);
            existing = pluginNode.SelectSingleNode(login.Name);
            if (existing == null)
                pluginNode.AppendChild(login);
            else
                pluginNode.ReplaceChild(login, existing);

            XmlElement ExportNameInComment = xmlDoc.CreateElement("ExportNameInComment");
            XmlAttribute export = xmlDoc.CreateAttribute("export");
            export.Value = instance.boExportNameInComment.ToString();
            ExportNameInComment.Attributes.Append(export);
            existing = pluginNode.SelectSingleNode(ExportNameInComment.Name);
            if (existing == null)
                pluginNode.AppendChild(ExportNameInComment);
            else
                pluginNode.ReplaceChild(ExportNameInComment, existing);

            XmlElement RoutePrivacyElement = xmlDoc.CreateElement("RoutePrivacy");
            RoutePrivacyElement.SetAttribute("RoutePrivacyIndex", instance.RoutePrivacyIndex.ToString());
            existing = pluginNode.SelectSingleNode(RoutePrivacyElement.Name);
            if (existing == null)
                pluginNode.AppendChild(RoutePrivacyElement);
            else
                pluginNode.ReplaceChild(RoutePrivacyElement, existing);

            // Save activity type mappings
            XmlElement mappings = xmlDoc.CreateElement("Mappings"); //Remains called only Mappings for compatibility reasons
            foreach (ActivityTypeMapping atm in instance.ActivityTypeMappings)
            {
                if (atm.Funbeat != 51) // 51 is default, only save mappings that differ
                {
                    XmlElement mapping = xmlDoc.CreateElement("Mapping");
                    XmlAttribute funbeat = xmlDoc.CreateAttribute("funbeat");
                    XmlAttribute st2 = xmlDoc.CreateAttribute("st2");
                    funbeat.Value = atm.Funbeat.ToString();
                    st2.Value = atm.SportTracks;
                    mapping.Attributes.Append(funbeat);
                    mapping.Attributes.Append(st2);

                    mappings.AppendChild(mapping);
                }
            }

            existing = pluginNode.SelectSingleNode(mappings.Name);
            if (existing == null)
                pluginNode.AppendChild(mappings);
            else
                pluginNode.ReplaceChild(mappings, existing);

            // Save equipment mappings
            XmlElement eqMappings = xmlDoc.CreateElement("EquipmentMappings");
            foreach (EquipmentTypeMapping etm in instance.EquipmentTypeMappings)
            {
                if (etm.Funbeat != "") // Only save mappings that are used
                {
                    XmlElement mapping = xmlDoc.CreateElement("Mapping");
                    XmlAttribute funbeat = xmlDoc.CreateAttribute("funbeat");
                    XmlAttribute st2 = xmlDoc.CreateAttribute("st2");
                    funbeat.Value = etm.Funbeat;
                    st2.Value = etm.SportTracks;
                    mapping.Attributes.Append(funbeat);
                    mapping.Attributes.Append(st2);

                    eqMappings.AppendChild(mapping);
                }
            }

            existing = pluginNode.SelectSingleNode(eqMappings.Name);
            if (existing == null)
                pluginNode.AppendChild(eqMappings);
            else
                pluginNode.ReplaceChild(eqMappings, existing);
        }
コード例 #2
0
ファイル: XmlNodeListTests.cs プロジェクト: nobled/mono
		// TODO:  Take the word save off front of this method when XmlNode.ReplaceChild() is implemented.

		public void saveTestReplaceChildAffectOnEnumeration ()
		{
			document.LoadXml ("<foo><child1/><child2/></foo>");
			element = document.DocumentElement;
			node = document.CreateElement("child3");
			enumerator = element.GetEnumerator();
			Assert.AreEqual (enumerator.MoveNext(), true, "MoveNext should have succeeded.");
			element.ReplaceChild(node, element.LastChild);
			enumerator.MoveNext();
			Assert.AreEqual (((XmlElement)enumerator.Current).LocalName, "child3", "Expected child3 element.");
			Assert.AreEqual (enumerator.MoveNext(), false, "MoveNext should have failed.");
		}
コード例 #3
0
ファイル: Config.cs プロジェクト: winterheart/game-utilities
 void mergeNodes(XmlElement oldroot,XmlElement newroot,string nd,string idattr)
 {
     string[] atr = idattr.Split('|');
     foreach (XmlElement e in newroot)
         if (e.Name == nd)
         {
             string vl = "";
             for (int i=0;i<atr.Length;i++)
             {
                 if (i != 0) vl += "|";
                 vl += e.Attributes[atr[i]].Value;
             }
             XmlElement e2 = findNode(oldroot, nd, idattr, vl);
             if (e2 == null)
                 oldroot.AppendChild(doc.ImportNode(e,true));
             else
             {
                 bool same = true;
                 if (e2.Attributes.Count != e.Attributes.Count)
                     same = false;
                 else
                     for (int i = 0; i < e2.Attributes.Count;i++ )
                     {
                         string nm = e2.Attributes[i].Name;
                         if (e.Attributes[nm] == null || e.Attributes[nm].Value != e2.Attributes[nm].Value)
                             same = false;
                     }
                 if (!same)
                 {
                     if (new MergeChanges(e2,e).ShowDialog() == DialogResult.OK)
                         oldroot.ReplaceChild(doc.ImportNode(e,true), e2);
                 }
             }
         }
 }
コード例 #4
0
ファイル: XamlParser.cs プロジェクト: lvv83/SharpDevelop
		IEnumerable<XmlNode> GetNormalizedChildNodes(XmlElement element)
		{
			XmlNode node = element.FirstChild;
			while (node != null) {
				XmlText text = node as XmlText;
				XmlCDataSection cData = node as XmlCDataSection;
				if (node.NodeType == XmlNodeType.SignificantWhitespace) {
					text = element.OwnerDocument.CreateTextNode(node.Value);
					element.ReplaceChild(text, node);
					node = text;
				}
				if (text != null || cData != null) {
					node = node.NextSibling;
					while (node != null
					       && (node.NodeType == XmlNodeType.Text
					           || node.NodeType == XmlNodeType.CDATA
					           || node.NodeType == XmlNodeType.SignificantWhitespace)) {
						if (text != null) text.Value += node.Value;
						else cData.Value += node.Value;
						XmlNode nodeToDelete = node;
						node = node.NextSibling;
						element.RemoveChild(nodeToDelete);
					}
					if (text != null) yield return text;
					else yield return cData;
				} else {
					yield return node;
					node = node.NextSibling;
				}
			}
		}
コード例 #5
0
ファイル: RegFreeCreator.cs プロジェクト: sillsdev/WorldPad
		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Creates the entries for the type library and all classes defined in this type
		/// library. We can get the necessary information for the file element (file name and
		/// size) directly from the file. We get the information for the type library from
		/// the type library itself.
		/// </summary>
		/// <param name="parent">The parent node.</param>
		/// <param name="fileName">Name (and path) of the file.</param>
		/// ------------------------------------------------------------------------------------
		public void ProcessTypeLibrary(XmlElement parent, string fileName)
		{
			m_BaseDirectory = Path.GetDirectoryName(fileName);
			m_FileName = fileName.ToLower();

			try
			{
				XmlNode oldChild;
				ITypeLib typeLib = LoadTypeLib(m_FileName);
				IntPtr pLibAttr;
				typeLib.GetLibAttr(out pLibAttr);
				var libAttr = (TYPELIBATTR)
					System.Runtime.InteropServices.Marshal.PtrToStructure(pLibAttr, typeof(TYPELIBATTR));
				typeLib.ReleaseTLibAttr(pLibAttr);

				string flags = string.Empty;
				if ((libAttr.wLibFlags & LIBFLAGS.LIBFLAG_FHASDISKIMAGE) == LIBFLAGS.LIBFLAG_FHASDISKIMAGE)
					flags = "HASDISKIMAGE";

				// <file name="FwKernel.dll" asmv2:size="1507328">
				XmlElement file = GetOrCreateFileNode(parent, fileName);

				// <typelib tlbid="{2f0fccc0-c160-11d3-8da2-005004defec4}" version="1.0" helpdir=""
				//		resourceid="0" flags="HASDISKIMAGE" />
				if (m_TlbGuids.ContainsKey(libAttr.guid))
				{
					Console.WriteLine("Warning: Type library with GUID {0} is defined in {1} and {2}",
						libAttr.guid, m_TlbGuids[libAttr.guid], Path.GetFileName(fileName));
				}
				else
				{
					m_TlbGuids.Add(libAttr.guid, Path.GetFileName(fileName));
					XmlElement elem = m_Doc.CreateElement("typelib", UrnAsmv1);
					elem.SetAttribute("tlbid", string.Format("{{{0}}}", libAttr.guid));
					elem.SetAttribute("version", string.Format("{0}.{1}", libAttr.wMajorVerNum,
						libAttr.wMinorVerNum));
					elem.SetAttribute("helpdir", string.Empty);
					elem.SetAttribute("resourceid", "0");
					elem.SetAttribute("flags", flags);
					oldChild = file.SelectSingleNode(string.Format("typelib[tlbid='{{{0}}}']",
						libAttr.guid));
					if (oldChild != null)
						file.ReplaceChild(elem, oldChild);
					else
						file.AppendChild(elem);
				}

				Debug.WriteLine(string.Format(@"typelib tlbid=""{0}"" version=""{1}.{2}"" helpdir="""" resourceid=""0"" flags=""{3}""",
					libAttr.guid, libAttr.wMajorVerNum, libAttr.wMinorVerNum, flags));

				int count = typeLib.GetTypeInfoCount();
				for (int i = 0; i < count; i++)
				{
					ITypeInfo typeInfo;
					typeLib.GetTypeInfo(i, out typeInfo);

					ProcessTypeInfo(parent, libAttr.guid, typeInfo);
				}

				oldChild = parent.SelectSingleNode(string.Format("file[name='{0}']",
					Path.GetFileName(fileName)));
				if (oldChild != null)
					parent.ReplaceChild(file, oldChild);
				else
					parent.AppendChild(file);
			}
			catch (System.Runtime.InteropServices.COMException)
			{
				// just ignore if this isn't a type library
				if (m_fDisplayWarnings)
					Console.WriteLine("Warning: Can't load type library {0}", fileName);
			}
		}
コード例 #6
0
ファイル: RegFreeCreator.cs プロジェクト: bbriggs/FieldWorks
		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Creates the entries for the type library and all classes defined in this type
		/// library. We can get the necessary information for the file element (file name and
		/// size) directly from the file. We get the information for the type library from
		/// the type library itself.
		/// </summary>
		/// <param name="parent">The parent node.</param>
		/// <param name="fileName">Name (and path) of the file.</param>
		/// ------------------------------------------------------------------------------------
		public void ProcessTypeLibrary(XmlElement parent, string fileName)
		{
			_baseDirectory = Path.GetDirectoryName(fileName);
			_fileName = fileName.ToLower();

			try
			{
				_log.LogMessage(MessageImportance.Low, "\tProcessing type library {0}", fileName);
				XmlNode oldChild;
				ITypeLib typeLib;
				RegHelper.LoadTypeLib(_fileName, out typeLib);
				IntPtr pLibAttr;
				typeLib.GetLibAttr(out pLibAttr);
				var libAttr = (TYPELIBATTR)
					Marshal.PtrToStructure(pLibAttr, typeof(TYPELIBATTR));
				typeLib.ReleaseTLibAttr(pLibAttr);

				string flags = string.Empty;
				if ((libAttr.wLibFlags & LIBFLAGS.LIBFLAG_FHASDISKIMAGE) == LIBFLAGS.LIBFLAG_FHASDISKIMAGE)
					flags = "HASDISKIMAGE";

				// <file name="FwKernel.dll" asmv2:size="1507328">
				var file = GetOrCreateFileNode(parent, fileName);

				// <typelib tlbid="{2f0fccc0-c160-11d3-8da2-005004defec4}" version="1.0" helpdir=""
				//		resourceid="0" flags="HASDISKIMAGE" />
				if (_tlbGuids.ContainsKey(libAttr.guid))
				{
					_log.LogWarning("Type library with GUID {0} is defined in {1} and {2}",
						libAttr.guid, _tlbGuids[libAttr.guid], Path.GetFileName(fileName));
				}
				else
				{
					_tlbGuids.Add(libAttr.guid, Path.GetFileName(fileName));
					XmlElement elem = _doc.CreateElement("typelib", UrnAsmv1);
					elem.SetAttribute("tlbid", libAttr.guid.ToString("B"));
					elem.SetAttribute("version", string.Format("{0}.{1}", libAttr.wMajorVerNum,
						libAttr.wMinorVerNum));
					elem.SetAttribute("helpdir", string.Empty);
					elem.SetAttribute("resourceid", "0");
					elem.SetAttribute("flags", flags);
					oldChild = file.SelectSingleNode(string.Format("asmv1:typelib[asmv1:tlbid='{0}']",
						libAttr.guid.ToString("B")), _nsManager);
					if (oldChild != null)
						file.ReplaceChild(elem, oldChild);
					else
						file.AppendChild(elem);
				}

				Debug.WriteLine(@"typelib tlbid=""{0}"" version=""{1}.{2}"" helpdir="""" resourceid=""0"" flags=""{3}""",
					libAttr.guid, libAttr.wMajorVerNum, libAttr.wMinorVerNum, flags);

				int count = typeLib.GetTypeInfoCount();
				_log.LogMessage(MessageImportance.Low, "\t\tTypelib has {0} types", count);
				for (int i = 0; i < count; i++)
				{
					ITypeInfo typeInfo;
					typeLib.GetTypeInfo(i, out typeInfo);

					ProcessTypeInfo(parent, libAttr.guid, typeInfo);
				}

				oldChild = parent.SelectSingleNode(string.Format("asmv1:file[asmv1:name='{0}']",
					Path.GetFileName(fileName)), _nsManager);
				if (oldChild != null)
					parent.ReplaceChild(file, oldChild);
				else
					parent.AppendChild(file);
			}
			catch (Exception)
			{
				// just ignore if this isn't a type library
				_log.LogMessage(MessageImportance.Normal, "Can't load type library {0}", fileName);
			}
		}
コード例 #7
0
ファイル: HistoryNode.cs プロジェクト: jaffrykee/ui
        //直接和xml打交道的处理和部分对于显示的刷新。
        //把dstXe加到srcXe里
        public static bool insertXmlNode(MainWindow pW, XmlControl xmlCtrl, XmlElement dstXe, XmlElement srcXe, int index = 0)
        {
            XmlElement tmpXe1 = dstXe.OwnerDocument.CreateElement("tmp1");
            XmlElement tmpXe2 = dstXe.OwnerDocument.CreateElement("tmp2");

            if(index < (srcXe.ChildNodes.Count + 1) / 2)
            {
                srcXe.PrependChild(tmpXe1);
                XmlNode iXe = tmpXe1;
                for (int i = 0; i < index; i++)
                {
                    XmlNode nextXe = iXe.NextSibling;

                    srcXe.ReplaceChild(tmpXe2, nextXe);
                    srcXe.ReplaceChild(nextXe, tmpXe1);
                    srcXe.ReplaceChild(tmpXe1, tmpXe2);
                    iXe = tmpXe1;
                }
                srcXe.ReplaceChild(dstXe, tmpXe1);
            }
            else
            {
                srcXe.AppendChild(tmpXe1);
                XmlNode iXe = tmpXe1;
                for (int i = srcXe.ChildNodes.Count - 1; i > index; i--)
                {
                    XmlNode prevXe = iXe.PreviousSibling;

                    srcXe.ReplaceChild(tmpXe2, prevXe);
                    srcXe.ReplaceChild(prevXe, tmpXe1);
                    srcXe.ReplaceChild(tmpXe1, tmpXe2);
                    iXe = tmpXe1;
                }
                srcXe.ReplaceChild(dstXe, tmpXe1);
            }
            if (xmlCtrl != null)
            {
                insertItemByXe(pW, xmlCtrl, dstXe, srcXe, ref index);
            }

            return false;
        }
コード例 #8
0
		private void PreprocessElement(XmlDocument document, XmlElement element, ref List<PreprocessorAreaData> datas, PreprocessorAreaData parentArea = null)
		{
			List<XmlElement> nodes = element.ChildNodes.OfType<XmlElement>().ToList();

			foreach (XmlElement subElement in nodes)
			{
				if (subElement == null)
				{
					continue;
				}

				switch (subElement.Name.ToLower())
				{
					case "mssqlauditorpreprocessor":
						{
							string className           = subElement.Attributes["preprocessor"].Value;

							XmlAttribute idAttr        = subElement.Attributes["id"];
							XmlAttribute nameAttr      = subElement.Attributes["name"];
							XmlAttribute columnAttr    = subElement.Attributes["column"];
							XmlAttribute rowAttr       = subElement.Attributes["row"];
							XmlAttribute colSpanAttr   = subElement.Attributes["colspan"];
							XmlAttribute rowSpanAttr   = subElement.Attributes["rowspan"];
							XmlAttribute vertTestAlign = subElement.Attributes["text-vertical-align"];
							XmlAttribute textAlign     = subElement.Attributes["text-align"];

							string id                  = "";
							string preprocName         = "unnamed";

							if (nameAttr != null)
							{
								preprocName = nameAttr.Value;
							}

							if (idAttr != null)
							{
								id = idAttr.Value;
							}

							int col     = ParseIntAttribute(columnAttr,  1);
							int row     = ParseIntAttribute(rowAttr,     1);
							int colSpan = ParseIntAttribute(colSpanAttr, 1);
							int rowSpan = ParseIntAttribute(rowSpanAttr, 1);

							VerticalTextAlign? preprocVertTestAlign = null;

							if (vertTestAlign != null)
							{
								VerticalTextAlign tempVertTestAlign;

								if (Enum.TryParse(vertTestAlign.Value, out tempVertTestAlign))
								{
									preprocVertTestAlign = tempVertTestAlign;
								}
							}

							TextAlign preprocTestAlign = TextAlign.Left;

							if (textAlign != null)
							{
								if (!Enum.TryParse(textAlign.Value, out preprocTestAlign))
								{
									preprocTestAlign = TextAlign.Left;
								}
							}

							IPreprocessor preprocessor =
								(from proc in this._availablePreprocessors where proc.GetType().Name == className select proc)
									.FirstOrDefault();

							if (preprocessor != null)
							{
								string          configuration = subElement.InnerXml;
								IContentFactory factory       = preprocessor.CreateContentFactory(id, configuration);

								PreprocessorData data = new PreprocessorData
								{
									ContentFactory    = factory,
									Name              = preprocName,
									Column            = col,
									Row               = row,
									ColSpan           = colSpan,
									RowSpan           = rowSpan,
									VerticalTextAlign = preprocVertTestAlign,
									TextAlign         = preprocTestAlign
								};

								XmlElement newSubElement = document.CreateElement("div");

								newSubElement.SetAttribute("style", "margin:0; padding:0;");
								newSubElement.InnerXml = string.Empty;

								element.ReplaceChild(newSubElement, subElement);

								if (parentArea != null)
								{
									parentArea.Preprocessors.Add(data);
								}
								else
								{
									log.ErrorFormat(
										"Invalid configuration: <mssqlauditorpreprocessor> is not embedded in <mssqlauditorpreprocessors>. " +
										"Are you using old style configuration file?" + Environment.NewLine +
										"Silently ignoring '{0}' with id='{1}' and name='{2}'",
										className,
										id,
										preprocName
									);

									throw new ArgumentOutOfRangeException(
										"document",
										"Invalid configuration: <mssqlauditorpreprocessor> is not embedded in <mssqlauditorpreprocessors>!"
									);
								}
								continue;
							}
							break;
						}
					case "mssqlauditorpreprocessors":
						{
							XmlAttribute idAttr       = subElement.Attributes["id"];
							XmlAttribute nameAttr     = subElement.Attributes["name"];
							XmlAttribute rowsAttr     = subElement.Attributes["rows"];
							XmlAttribute columnsAttr  = subElement.Attributes["columns"];
							XmlAttribute splitterAttr = subElement.Attributes["splitter"];

							string id       = "";
							string name     = "unnamed";
							string rows     = "";
							string columns  = "";
							string splitter = "";

							if (nameAttr != null)
							{
								name = nameAttr.Value;
							}
							if (idAttr != null)
							{
								id = idAttr.Value;
							}
							if (columnsAttr != null)
							{
								columns = columnsAttr.Value;
							}
							if (rowsAttr != null)
							{
								rows = rowsAttr.Value;
							}
							if (splitterAttr != null)
							{
								splitter = splitterAttr.Value;
							}

							PreprocessorAreaData container = new PreprocessorAreaData(id, name, columns, rows);

							if (string.Equals(splitter, "no", StringComparison.InvariantCultureIgnoreCase))
							{
								container.NoSplitter = true;
							}

							datas.Add(container);

							PreprocessElement(document, subElement, ref datas, container);

							container.CheckPreprocessors();

							continue;
						}
				}

				PreprocessElement(document, subElement, ref datas);
			}
		}
コード例 #9
0
    /// <summary>
    /// Сравнивает два документа. Результат в pFldLocal
    /// </summary>
    /// <param name="pFldLocal"></param>
    /// <param name="pFldRemote"></param>
    public static void compareFldrs(XmlElement pFldLocal, XmlElement pFldRemote) {
      /*Обновление модулей и удаление старых*/
      XmlNodeList vMdls = pFldLocal.SelectNodes("assembly");
      foreach(XmlElement vNode in vMdls) {
        XmlElement vRNode = (XmlElement)pFldRemote.SelectSingleNode("assembly[@name='" + vNode.GetAttribute("name") + "']");
        if((vRNode != null) && (Utl.CompareVer(vRNode.GetAttribute("version"), vNode.GetAttribute("version")) > 0)) {
          XmlNode vNewEl = pFldLocal.OwnerDocument.ImportNode(vRNode, true);
          pFldLocal.ReplaceChild(vNewEl, vNode);
        } else {
          if(vRNode == null)
            vNode.SetAttribute("action", "kill");
          else
            vNode.SetAttribute("action", "skip");
        }
      }
      /*Добавляем новые модули*/
      vMdls = pFldRemote.SelectNodes("assembly");
      foreach(XmlElement vNode in vMdls) {
        XmlElement vLNode = (XmlElement)pFldLocal.SelectSingleNode("assembly[@name='" + vNode.GetAttribute("name") + "']");
        if(vLNode == null) {
          XmlNode vNewEl = pFldLocal.OwnerDocument.ImportNode(vNode, true);
          pFldLocal.AppendChild(vNewEl);
        }
      }

      /*Обновляем существующие и удаляем старые папки*/
      vMdls = pFldLocal.SelectNodes("folder");
      foreach(XmlElement vNode in vMdls) {
        XmlElement vRNode = (XmlElement)pFldRemote.SelectSingleNode("folder[@name='" + vNode.GetAttribute("name") + "']");
        if(vRNode != null) {
          compareFldrs(vNode, vRNode);
        } else {
          if(!vNode.GetAttribute("name").Equals("trash"))
            vNode.SetAttribute("action", "kill");
        }
      }
      /*Добавляем новые папки*/
      vMdls = pFldRemote.SelectNodes("folder");
      foreach(XmlElement vNode in vMdls) {
        XmlNode vLNode = pFldLocal.SelectSingleNode("folder[@name='" + vNode.GetAttribute("name") + "']");
        if(vLNode == null) {
          XmlNode vNewEl = pFldLocal.OwnerDocument.ImportNode(vNode, true);
          pFldLocal.AppendChild(vNewEl);
        }
      }

    }