Beispiel #1
0
        private XMLPair ReadXMLPair(string keyValuePair)
        {
            string[] s    = keyValuePair.Split('=');
            XMLPair  pair = new XMLPair();

            pair.PropertyName = s[0];
            s[1]       = s[1].TrimStart('"');
            s[1]       = s[1].TrimEnd('"');
            pair.Value = s[1];
            //Debug.WriteLine(pair.PropertyName + "=" + pair.Value);
            return(pair);
        }
        public void StartMethod()
        {
            List <XMLNode> nodes = navPage.metaTab.Nodes;

            List <string> metaToRemove = new List <string> {
                "?xml", "!DOCTYPE", "metadata", "title", "desc"
            };

            foreach (string metaName in metaToRemove)
            {
                if (nodes.Any(x => x.Name == metaName))
                {
                    XMLNode nodeToRemove = nodes.Find(x => x.Name == metaName);
                    if (nodeToRemove.Children.Count == 0)
                    {
                        if (nodeToRemove.Parent == null)
                        {
                            nodes.Remove(nodeToRemove);
                        }
                        else
                        {
                            XMLNode parent = nodeToRemove.Parent;
                            parent.Children.Remove(nodeToRemove);
                            nodes.Remove(nodeToRemove);
                        }
                    }
                    else
                    {
                        RemoveChildren(ref nodes, nodeToRemove.Children);
                        if (nodeToRemove.Parent == null)
                        {
                            nodes.Remove(nodeToRemove);
                        }
                        else
                        {
                            XMLNode parent = nodeToRemove.Parent;
                            parent.Children.Remove(nodeToRemove);
                            nodes.Remove(nodeToRemove);
                        }
                    }
                }
            }
            XMLNode defsNode = nodes.Find(x => x.Name == "defs");
            XMLNode svgNode  = nodes.Find(x => x.Name == "svg");

            if (defsNode != null)
            {
                if (defsNode.Children.Count == 0)
                {
                    svgNode.Children.Remove(defsNode);
                    nodes.Remove(defsNode);
                }
            }

            XMLNode sodipodi = nodes.Find(x => x.Name == "sodipodi:namedview");

            if (sodipodi != null)
            {
                svgNode.Children.Remove(sodipodi);
                nodes.Remove(sodipodi);
            }
            List <XMLPair> attr  = svgNode.Attributes.ToList();
            XMLPair        xmlns = attr.Find(x => x.PropertyName == "xmlns");

            attr.Remove(xmlns);
            foreach (XMLPair pair in svgNode.Attributes)
            {
                if (!pair.PropertyName.StartsWith("xmlns:"))
                {
                    attr.Remove(pair);
                }
            }
            svgNode.Attributes = attr;

            bool[] toStay = new bool[svgNode.Attributes.Count];
            for (int i = 0; i < svgNode.Attributes.Count; i++)
            {
                toStay[i] = false;
            }

            string toTrim = "xmlns:";

            for (int counter = 0; counter < svgNode.Attributes.Count; counter++)
            {
                XMLPair pair = svgNode.Attributes[counter];
                foreach (XMLNode node in nodes)
                {
                    if (node.Name != "svg")
                    {
                        if (node.Attributes.Count != 0)
                        {
                            foreach (XMLPair pairs in node.Attributes)
                            {
                                string name = pair.PropertyName.Replace(toTrim, "");
                                if (pairs.PropertyName.StartsWith(name))
                                {
                                    toStay[counter] = true;
                                }
                            }
                        }
                    }
                }
            }
            int n = svgNode.Attributes.Count;

            for (int j = n - 1; j >= 0; j--)
            {
                if (toStay[j] == false)
                {
                    svgNode.Attributes.RemoveAt(j);
                }
            }
            svgNode.Attributes.Add(xmlns);
            RemoveNotNeededIDs(ref nodes);
            RemoveChildren(ref nodes, nodes.Find(x => x.Name == "svg").Children);
            string path = MakeFileNamePath();

            SaveToFile(nodes, path);
            OpenFile(path);
        }