Example #1
0
        /// <summary>
        /// 格式化日期类型
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        private XmlDocument DateTimeFormat(XmlDocument doc, List <string> eles)
        {
            if (eles == null || eles.Count == 0 || doc == null)
            {
                return(doc);
            }
            XmlDocument newDoc = new XmlDocument();

            try {
                // 建立一个 XmlTextReader 对象来读取 XML 数据。
                using (XmlTextReader myXmlReader = new XmlTextReader(doc.OuterXml, XmlNodeType.Element, null)) {
                    // 使用指定的文件与编码方式来建立一个 XmlTextWriter 对象。
                    using (System.Xml.XmlTextWriter myXmlWriter = new System.Xml.XmlTextWriter(_filePath, Encoding.UTF8)) {
                        myXmlWriter.Formatting  = Formatting.Indented;
                        myXmlWriter.Indentation = 4;
                        myXmlWriter.WriteStartDocument();

                        string elementName = "";

                        // 解析并显示每一个节点。
                        while (myXmlReader.Read())
                        {
                            switch (myXmlReader.NodeType)
                            {
                            case XmlNodeType.Element:
                                myXmlWriter.WriteStartElement(myXmlReader.Name);
                                myXmlWriter.WriteAttributes(myXmlReader, true);
                                elementName = myXmlReader.Name;

                                break;

                            case XmlNodeType.Text:
                                if (eles.Contains(elementName))
                                {
                                    myXmlWriter.WriteString(XmlConvert.ToDateTime(myXmlReader.Value, XmlDateTimeSerializationMode.Local).ToString("yyyy-MM-dd HH:mm:ss"));
                                    break;
                                }
                                myXmlWriter.WriteString(myXmlReader.Value);
                                break;

                            case XmlNodeType.EndElement:
                                myXmlWriter.WriteEndElement();
                                break;
                            }
                        }
                    }
                }
                newDoc.Load(_filePath);
                return(newDoc);
            } catch (Exception ex) {
                MessageBoxPLM.Show(string.Format("导入ERP文件格式化失败,错误信息:{0}", ex.Message));
                return(null);
            }
        }
Example #2
0
        /// <summary>
        /// Converts the specified html into XHTML compliant text.
        /// </summary>
        /// <param name="reader">sgml reader.</param>
        /// <param name="html">html to convert.</param>
        /// <param name="converter">The converter.</param>
        /// <returns></returns>
        /// ///
        private static string ConvertHtmlToXHtml(SgmlReader reader, string html, Converter<string, string> converter)
        {
            reader.DocType = "html";
            reader.WhitespaceHandling = WhitespaceHandling.All;
            // Hack to fix SF bug #1678030
            html = RemoveNewLineBeforeCDATA(html);
            reader.InputStream = new StringReader("<html>" + html + "</html>");
            reader.CaseFolding = CaseFolding.ToLower;
            StringWriter writer = new StringWriter();
            XmlWriter xmlWriter = null;
            try
            {
                xmlWriter = new XmlTextWriter(writer);

                bool insideAnchor = false;
                bool skipRead = false;
                while ((skipRead || reader.Read()) && !reader.EOF)
                {
                    skipRead = false;
                    switch(reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            //Special case for anchor tags for the time being.
                            //We need some way to communicate which elements the current node is nested within
                            if (reader.IsEmptyElement)
                            {
                                xmlWriter.WriteStartElement(reader.LocalName);
                                xmlWriter.WriteAttributes(reader, true);
                                if (reader.LocalName == "a" || reader.LocalName == "script")
                                    xmlWriter.WriteFullEndElement();
                                else
                                    xmlWriter.WriteEndElement();
                            }
                            else
                            {
                                if (reader.LocalName == "a")
                                    insideAnchor = true;
                                xmlWriter.WriteStartElement(reader.LocalName);
                                xmlWriter.WriteAttributes(reader, true);
                            }
                            break;

                        case XmlNodeType.Text:
                            string text = reader.Value;

                            if (converter != null && !insideAnchor)
                                xmlWriter.WriteRaw(converter(text));
                            else
                                xmlWriter.WriteString(text);
                            break;

                        case XmlNodeType.EndElement:
                            if (reader.LocalName == "a")
                                insideAnchor = false;

                            if (reader.LocalName == "a" || reader.LocalName == "script")
                                xmlWriter.WriteFullEndElement();
                            else
                                xmlWriter.WriteEndElement();
                            break;

                        default:
                            xmlWriter.WriteNode(reader, true);
                            skipRead = true;
                            break;
                    }
                }
            }
            finally
            {
                if (xmlWriter != null)
                {
                    xmlWriter.Close();
                }
            }

            string xml = writer.ToString();
            return xml.Substring("<html>".Length, xml.Length - "<html></html>".Length);
        }
        /// <summary>
        /// Idea here is to re-create the XmlTextReader Node and this accounts for 50% of the code.
        /// Original code borrowed from http://www.sdltridionworld.com/community/2011_extensions/parentchangenotifier.aspx
        /// Thanks for the work from Serguei Martchenko - would not be possible without his example!
        /// </summary>
        /// <param name="xReader"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        private XmlTextReader PreprocessListItems(XmlTextReader xReader, PipelineContext context)
        {
            TextWriter sWriter = new StringWriter();
            XmlTextWriter xWriter = new XmlTextWriter(sWriter);
            string attrName = "metadataFieldValue";
            string attrValue = "";  // set this to 'fieldValue', for example, to debug and prove it is working

            xReader.MoveToContent();

            using(var tdse = new TDSEWrapper())
            {
                while (!xReader.EOF)
                {
                    switch (xReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            xWriter.WriteStartElement(xReader.Prefix, xReader.LocalName, xReader.NamespaceURI);

                            // add all attributes back  -- always START with this to NOT break the GUI
                            xWriter.WriteAttributes(xReader, false);

                            try
                            {
                                // add my custom attribute
                                if (IsValidItem(xReader))
                                {
                                    string id = xReader.GetAttribute("ID");  // URI
                                    TcmUri uri = new TcmUri(id);

                                    if (uri.ItemType == ItemType.Component)
                                    {
                                        // Get Metadata Value
                                        // 0 seconds with no processing
                                        // 12 seconds for 250 Components with TOM API, Component.MetadataFields...
                                        // 12 seconds for 250 Components with Core Service
                                        // 2 seconds for 250 Components with TOM API and GetXML  (FASTEST!)

                                        // Core Service
                                        //attrValue = GetMetadataValue(fieldName, id);

                                        // TDSE...Fastest with GetXML
                                        Component comp = tdse.TDSE.GetObject(id, Tridion.ContentManager.Interop.TDSDefines.EnumOpenMode.OpenModeView) as Component;
                                        attrValue = GetMetadataValue(comp, "article_number");
                                    }

                                    // add new metadata field attribute
                                    xWriter.WriteAttributeString(attrName, attrValue);
                                    xReader.MoveToElement();
                                }
                            }
                            catch (Exception ex)
                            {
                                Trace.TraceError("EXCEPTION " + ex.Message + ex.ToString() + ex.StackTrace);
                            }

                            if (xReader.IsEmptyElement)
                            {
                                xWriter.WriteEndElement();
                            }
                            break;

                        case XmlNodeType.EndElement:
                            xWriter.WriteEndElement();
                            break;
                        case XmlNodeType.CDATA:
                            // Copy CDATA node  <![CDATA[]]>
                            xWriter.WriteCData(xReader.Value);
                            break;
                        case XmlNodeType.Comment:
                            // Copy comment node <!-- -->
                            xWriter.WriteComment(xReader.Value);
                            break;
                        case XmlNodeType.DocumentType:
                            // Copy XML documenttype
                            xWriter.WriteDocType(xReader.Name, null, null, null);
                            break;
                        case XmlNodeType.EntityReference:
                            xWriter.WriteEntityRef(xReader.Name);
                            break;
                        case XmlNodeType.ProcessingInstruction:
                            xWriter.WriteProcessingInstruction(xReader.Name, xReader.Value);
                            break;
                        case XmlNodeType.SignificantWhitespace:
                            xWriter.WriteWhitespace(xReader.Value);
                            break;
                        case XmlNodeType.Text:
                            xWriter.WriteString(xReader.Value);
                            break;
                        case XmlNodeType.Whitespace:
                            xWriter.WriteWhitespace(xReader.Value);
                            break;
                    }
                    xReader.Read();
                };
            }
            xWriter.Flush();

            xReader = new XmlTextReader(new StringReader(sWriter.ToString()));
            xReader.MoveToContent();
            //-> Write XML of tcm:Item out...
            //   This is where the attribute in the config file is matched.
            // Trace.Write(sWriter.ToString() + Environment.NewLine);
            return xReader;
        }
        private XmlTextReader PreprocessListItems(XmlTextReader xReader, PipelineContext context)
        {
            TextWriter sWriter = new StringWriter();
            XmlTextWriter xWriter = new XmlTextWriter(sWriter);
            string attrName = "metadataFieldValue";  // Must be same as extension config,  'selector="@metadataFieldValue"'
            string attrValue = "fieldValue";  // default here to confirm GUI DataExtender is working - will update value below

            xReader.MoveToContent();

            while (!xReader.EOF)
            {
                switch (xReader.NodeType)
                {
                    case XmlNodeType.Element:
                        xWriter.WriteStartElement(xReader.Prefix, xReader.LocalName, xReader.NamespaceURI);

                        // add all list attributes back  -- always START with this to NOT break the GUI
                        xWriter.WriteAttributes(xReader, false);

                        try
                        {
                            // add my custom attribute
                            if (IsValidItem(xReader))
                            {
                                string id = xReader.GetAttribute("ID");  // URI
                                TcmUri uri = new TcmUri(id);

                                if (uri.ItemType == ItemType.Component)
                                {
                                    // Do Work Here....
                                    attrValue = "your new value";
                                }

                                // add new metadata field attribute
                                xWriter.WriteAttributeString(attrName, attrValue);
                                xReader.MoveToElement();
                            }
                        }
                        catch (Exception ex)
                        {
                            Trace.TraceError("EXCEPTION " + ex.Message + ex.ToString() + ex.StackTrace);
                        }

                        if (xReader.IsEmptyElement)
                        {
                            xWriter.WriteEndElement();
                        }
                        break;

                    case XmlNodeType.EndElement:
                        xWriter.WriteEndElement();
                        break;
                    case XmlNodeType.CDATA:
                        // Copy CDATA node  <![CDATA[]]>
                        xWriter.WriteCData(xReader.Value);
                        break;
                    case XmlNodeType.Comment:
                        // Copy comment node <!-- -->
                        xWriter.WriteComment(xReader.Value);
                        break;
                    case XmlNodeType.DocumentType:
                        // Copy XML documenttype
                        xWriter.WriteDocType(xReader.Name, null, null, null);
                        break;
                    case XmlNodeType.EntityReference:
                        xWriter.WriteEntityRef(xReader.Name);
                        break;
                    case XmlNodeType.ProcessingInstruction:
                        xWriter.WriteProcessingInstruction(xReader.Name, xReader.Value);
                        break;
                    case XmlNodeType.SignificantWhitespace:
                        xWriter.WriteWhitespace(xReader.Value);
                        break;
                    case XmlNodeType.Text:
                        xWriter.WriteString(xReader.Value);
                        break;
                    case XmlNodeType.Whitespace:
                        xWriter.WriteWhitespace(xReader.Value);
                        break;
                }
                xReader.Read();
            };

            xWriter.Flush();

            xReader = new XmlTextReader(new StringReader(sWriter.ToString()));
            xReader.MoveToContent();

            //-> Write XML of tcm:Item out...
            //   This is where the attribute in the config file is matched -> selector="@metadataFieldValue"
            // Trace.Write(sWriter.ToString() + Environment.NewLine);
            return xReader;
        }
Example #5
0
 public static string InjectInXml(string XML, int InjectionPosition, string Payload)
 {
     //StringBuilder OutXml = new StringBuilder();
     StringReader XMLStringReader = new StringReader(XML.Trim());
     XmlReader Reader = XmlReader.Create(XMLStringReader);
     //XmlWriter Writer = XmlWriter.Create(OutXml);
     StringWriter OutXml = new StringWriter();
     XmlTextWriter Writer = new XmlTextWriter(OutXml);
     int ParameterCount = 0;
     bool Read = true;
     bool NextRead = false;
     while (Read)
     {
         if (!NextRead) Read = Reader.Read();
         NextRead = false;
         if (!Read) continue;
         if (Reader.IsStartElement())
         {
             Writer.WriteStartElement(Reader.Name);
             if(Reader.HasAttributes) Writer.WriteAttributes(Reader, false);
             Read = Reader.Read();
             if (Reader.NodeType == XmlNodeType.EndElement)
             {
                 if (ParameterCount == InjectionPosition)
                     Writer.WriteString(Payload);
                 else
                     Writer.WriteString("");
                 ParameterCount++;
                 Writer.WriteEndElement();
             }
             else
             {
                 NextRead = true;
             }
         }
         else
         {
             if (Reader.NodeType == XmlNodeType.EndElement)
             {
                 Writer.WriteEndElement();
             }
             else
             {
                 if (ParameterCount == InjectionPosition)
                     Writer.WriteString(Payload);
                 else
                     Writer.WriteString(Reader.Value);
                 ParameterCount++;
             }
         }
     }
     Reader.Close();
     Writer.Close();
     OutXml.Close();
     //string OutXmlString = OutXml.ToString().Split(new string[] { "?>" }, 2, StringSplitOptions.None)[1];
     return OutXml.ToString();
 }
 // Writes the current node into the provided XmlWriter.
 private void WriteNode(XmlTextWriter xtw, bool defattr) {
     int d = this.NodeType == XmlNodeType.None ? -1 : this.Depth;
     while (this.Read() && (d < this.Depth)) {
         switch (this.NodeType) {
             case XmlNodeType.Element:
                 xtw.WriteStartElement(this.Prefix, this.LocalName, this.NamespaceURI);
                 xtw.QuoteChar = this.QuoteChar;
                 xtw.WriteAttributes(this, defattr);
                 if (this.IsEmptyElement) {
                     xtw.WriteEndElement();
                 }
                 break;
             case XmlNodeType.Text:
                 xtw.WriteString(this.Value);
                 break;
             case XmlNodeType.Whitespace:
             case XmlNodeType.SignificantWhitespace:
                 xtw.WriteWhitespace(this.Value);
                 break;
             case XmlNodeType.CDATA:
                 xtw.WriteCData(this.Value);
                 break;
             case XmlNodeType.EntityReference:
                 xtw.WriteEntityRef(this.Name);
                 break;
             case XmlNodeType.XmlDeclaration:
             case XmlNodeType.ProcessingInstruction:
                 xtw.WriteProcessingInstruction(this.Name, this.Value);
                 break;
             case XmlNodeType.DocumentType:
                 xtw.WriteDocType(this.Name, this.GetAttribute("PUBLIC"), this.GetAttribute("SYSTEM"), this.Value);
                 break;
             case XmlNodeType.Comment:
                 xtw.WriteComment(this.Value);
                 break;
             case XmlNodeType.EndElement:
                 xtw.WriteFullEndElement();
                 break;
         }
     }
     if (d == this.Depth && this.NodeType == XmlNodeType.EndElement) {
         Read();
     }
 }
        private void VoterExportXMLButton_Click(object sender, System.EventArgs e)
        {
            DateTime startDate;
            DateTime endDate;
            if (rdAllDates.Checked)
            {
                startDate = new DateTime(2004, 1, 1);
                endDate = DateTime.Today;
            }
            else
            {
                startDate = (StartDateTextBox.Text == null && !Information.IsDate(StartDateTextBox.Text)) ?
                     new DateTime(2004, 1, 1) : DateTime.Parse(StartDateTextBox.Text);
                endDate = (EndDateTextBox.Text == null && !Information.IsDate(EndDateTextBox.Text)) ?
                     new DateTime(2010, 1, 1) : DateTime.Parse(EndDateTextBox.Text);
            }

            Response.Charset = "utf-8";
            Response.ContentType = "text/xml";
            Response.AddHeader("Content-Disposition", "attachment; filename=\"survey_results" + SurveyId + ".xml\"");

            NSurveyVoter voterAnswers = new Voters().GetForExport(SurveyId, startDate, endDate);


            WebSecurityAddInCollection securityAddIns = WebSecurityAddInFactory.CreateWebSecurityAddInCollection(new SecurityAddIns().GetWebSecurityAddIns(SurveyId), ViewState, null);
            NameValueCollection addInVoterData;

            if (voterAnswers.Voter.Rows.Count > 0)
            {
                // Get security addins data if any available and get key name
                // to add it as new column to the voter table
                for (int i = 0; i < securityAddIns.Count; i++)
                {
                    addInVoterData = securityAddIns[i].GetAddInVoterData(voterAnswers.Voter[0].VoterID);
                    if (addInVoterData != null)
                    {
                        for (int j = 0; j < addInVoterData.Count; j++)
                        {
                            voterAnswers.Voter.Columns.Add(new DataColumn(addInVoterData.GetKey(j), typeof(string), null, System.Data.MappingType.Element));
                        }
                    }
                }

                for (int voterIndex = 0; voterIndex < voterAnswers.Voter.Rows.Count; voterIndex++)
                {
                    // Get security addins data if any available
                    for (int i = 0; i < securityAddIns.Count; i++)
                    {
                        addInVoterData =
                            securityAddIns[i].GetAddInVoterData(((NSurveyVoter.VoterRow)voterAnswers.Voter.Rows[voterIndex]).VoterID);
                        if (addInVoterData != null)
                        {
                            for (int j = 0; j < addInVoterData.Count; j++)
                            {
                                voterAnswers.Voter.Rows[voterIndex][addInVoterData.GetKey(j)] = addInVoterData[j];
                            }
                        }
                    }
                }
            }


            XmlReader reader = new XmlTextReader(voterAnswers.GetXml(), XmlNodeType.Document, null); ;
            XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8); ;

            writer.WriteStartDocument(true);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        writer.WriteStartElement(reader.Prefix,
                            reader.LocalName, reader.NamespaceURI);
                        if (reader.HasAttributes)
                        {
                            writer.WriteAttributes(reader, true);
                            reader.MoveToElement();
                        }
                        if (reader.IsEmptyElement)
                            writer.WriteEndElement();
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteEndElement();
                        break;
                    case XmlNodeType.Text:
                        // removes any invalid xml char
                        writer.WriteString(reader.Value.Replace(((char)12).ToString(), ""));
                        break;
                    case XmlNodeType.CDATA:
                        writer.WriteCData(reader.Value);
                        break;
                }
            }
            writer.WriteEndDocument();

            writer.Close();
            reader.Close();

            Response.End();
        }
Example #8
0
		public void WriteAttributes ()
		{
			XmlDocument doc = new XmlDocument();
			StringWriter sw = new StringWriter();
			XmlWriter wr = new XmlTextWriter(sw);
			StringBuilder sb = sw.GetStringBuilder();
			XmlParserContext ctx = new XmlParserContext(doc.NameTable, new XmlNamespaceManager(doc.NameTable), "", XmlSpace.Default);
			XmlTextReader xtr = new XmlTextReader("<?xml version='1.0' encoding='utf-8' standalone='no'?><root a1='A' b2='B' c3='C'><foo><bar /></foo></root>", XmlNodeType.Document, ctx);

			xtr.Read();	// read XMLDecl
			wr.WriteAttributes(xtr, false);
			// This method don't always have to take this double-quoted style...
			Assert.AreEqual ("version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"", sw.ToString ().Trim (),
				"#WriteAttributes.XmlDecl.1");

			sb.Remove(0, sb.Length);	// init
			ctx = new XmlParserContext(doc.NameTable, new XmlNamespaceManager(doc.NameTable), "", XmlSpace.Default);
			xtr = new XmlTextReader("<?xml version='1.0'		 standalone='no'?><root a1='A' b2='B' c3='C'><foo><bar /></foo></root>", XmlNodeType.Document, ctx);
			xtr.Read();	// read XMLDecl
			Assert.AreEqual (XmlNodeType.XmlDeclaration, xtr.NodeType);
			sw = new StringWriter ();
			wr = new XmlTextWriter (sw);

			// This block raises an error on MS.NET 1.0.
			wr.WriteAttributes(xtr, false);
			// This method don't always have to take this double-quoted style...
			Assert.AreEqual ("version=\"1.0\" standalone=\"no\"", sw.ToString ().Trim (),
				"#WriteAttributes.XmlDecl.2");

			sw = new StringWriter ();
			wr = new XmlTextWriter (sw);
			sb.Remove(0, sb.Length);	// init

			xtr.Read();	// read root
			Assert.AreEqual (XmlNodeType.Element, xtr.NodeType);
			wr.WriteStartElement(xtr.LocalName, xtr.NamespaceURI);
			wr.WriteAttributes(xtr, false);
			wr.WriteEndElement();
			wr.Close();
			// This method don't always have to take this double-quoted style...
			Assert.AreEqual ("<root a1=\"A\" b2=\"B\" c3=\"C\" />", sw.ToString ().Trim (),
				"#WriteAttributes.Element");
			xtr.Close ();
		}
Example #9
0
        public static string InjectInXml(string XML, int InjectionPosition, string Payload)
        {
            //StringBuilder OutXml = new StringBuilder();
            StringReader XMLStringReader = new StringReader(XML.Trim());
            XmlReader Reader = XmlReader.Create(XMLStringReader);
            //XmlWriter Writer = XmlWriter.Create(OutXml);
            StringWriter OutXml = new StringWriter();
            XmlTextWriter Writer = new XmlTextWriter(OutXml);
            Writer.Formatting = Formatting.Indented;
            int ParameterCount = 0;
            bool Read = true;
            //bool NextRead = false;
            while (Read)
            {
                //if (!NextRead) Read = Reader.Read();
                //NextRead = false;
                Read = Reader.Read();
                if (!Read) continue;
                //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace)
                //{
                //    Reader.Read();
                //}
                if (Reader.IsStartElement())
                {
                    Writer.WriteStartElement(Reader.Name);
                    if(Reader.HasAttributes) Writer.WriteAttributes(Reader, false);
                    if (Reader.IsEmptyElement)
                    {
                        if (ParameterCount == InjectionPosition)
                            Writer.WriteString(Payload);
                        else
                            Writer.WriteString(Reader.Value);
                        ParameterCount++;
                        Writer.WriteEndElement();
                    }

                    //Read = Reader.Read();
                    //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace)
                    //{
                    //    Reader.Read();
                    //}
                    //if (Reader.NodeType == XmlNodeType.Text || Reader.NodeType == XmlNodeType.EndElement)
                    //{
                    //    if (ParameterCount == InjectionPosition)
                    //        Writer.WriteString(Payload);
                    //    else
                    //        Writer.WriteString(Reader.Value);
                    //    ParameterCount++;
                    //}
                    //else
                    //{
                    //    NextRead = true;
                    //}
                    //if (Reader.NodeType == XmlNodeType.EndElement)
                    //{
                    //    //if (ParameterCount == InjectionPosition)
                    //    //    Writer.WriteString(Payload);
                    //    //else
                    //    //    Writer.WriteString("");
                    //    //ParameterCount++;
                    //    Writer.WriteEndElement();
                    //}
                }
                else if (Reader.NodeType == XmlNodeType.Text)
                {
                    if (ParameterCount == InjectionPosition)
                        Writer.WriteString(Payload);
                    else
                        Writer.WriteString(Reader.Value);
                    ParameterCount++;
                }
                else if (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace)
                {
                }
                else if (Reader.NodeType == XmlNodeType.EndElement)
                {
                    Writer.WriteEndElement();
                }
                //else
                //{
                //    if (Reader.NodeType == XmlNodeType.EndElement)
                //    {
                //        Writer.WriteEndElement();
                //    }
                //    //else
                //    //{
                //    //    if (ParameterCount == InjectionPosition)
                //    //        Writer.WriteString(Payload);
                //    //    else
                //    //        Writer.WriteString(Reader.Value);
                //    //    ParameterCount++;
                //    //}
                //}
            }
            Reader.Close();
            Writer.Close();
            OutXml.Close();
            //string OutXmlString = OutXml.ToString().Split(new string[] { "?>" }, 2, StringSplitOptions.None)[1];
            return OutXml.ToString();
        }
Example #10
0
        public static void selectfeatures(Pair<string, float>[] featureweights, Pair<string, string>[] labels, string inputFile, string outputFile)
        {
            orderfeatures(featureweights, inputFile);
            opgroup[] featureIdx = new opgroup[featureweights.Length];
            for (int i = 0; i < featureweights.Length; ++i)
            {
                featureIdx[i] = new opgroup(featureweights[i].first);
            }
            globvars.labels = labels;
            SetMatchAttrFile(inputFile, featureIdx);
            FileStream fso = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
            StreamWriter tfso = new StreamWriter(fso);
            FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
            XmlTextReader xi = new XmlTextReader(fs);
            XmlTextWriter xo = new XmlTextWriter(tfso);
            xo.Indentation = 1;
            xo.IndentChar = '\t';
            xo.Formatting = Formatting.Indented;
            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.Element && xi.IsStartElement())
                {
                    if (xi.Name == "dataset")
                    {
                        xo.WriteStartElement(xi.Name); // dataset
                        xo.WriteAttributes(xi, true);
                        break;
                    }
                }
                else
                {
                    xo.WriteNode(xi, true);
                }
            }
            xo.WriteStartElement("header");
            xo.WriteStartElement("attributes");
            for (int i = 0; i < featureweights.Length; ++i)
            {
                string s = featureweights[i].first;
                float curweight = featureweights[i].second;
                xo.WriteStartElement("attribute");
                if (s == "class")
                {
                    xo.WriteAttributeString("class", "yes");
                    xo.WriteAttributeString("name", "class");
                    xo.WriteAttributeString("type", "nominal");
                    xo.WriteStartElement("labels");
                    foreach (string x in labels.GetUnique())
                    {
                        xo.WriteElementString("label", x);
                    }
                    xo.WriteEndElement(); // labels
                    xo.WriteEndElement(); // attribute
                }
                else
                {
                    xo.WriteAttributeString("name", s);
                    xo.WriteAttributeString("type", "numeric");
                    xo.WriteStartElement("metadata");
                    xo.WriteStartElement("property");
                    xo.WriteAttributeString("name", "weight");
                    xo.WriteValue(curweight);
                    xo.WriteEndElement(); // property
                    xo.WriteEndElement(); // metadata
                    xo.WriteEndElement(); // attribute
                }
            }

            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.EndElement)
                {
                    if (xi.Name == "attributes")
                    {
                        xo.WriteEndElement();
                    }
                    else if (xi.Name == "header")
                    {
                        xo.WriteEndElement();
                        break;
                    }
                }
            }
            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.Element && xi.IsStartElement())
                {
                    xo.WriteStartElement(xi.Name);
                    xo.WriteAttributes(xi, true);
                    if (xi.Name == "instances")
                        break;
                }
            }
            int vcount = 0;
            while (xi.Read())
            {
                if (xi.Name == "instance")
                {
                    if (xi.IsStartElement())
                    {
                        vcount = 0;
                        xo.WriteStartElement(xi.Name);
                        xo.WriteAttributes(xi, true);
                    }
                    else if (xi.NodeType == XmlNodeType.EndElement)
                    {
                        foreach (opgroup x in featureIdx)
                        {
                            xo.WriteElementString("value", x.GetVal());
                        }
                        xo.WriteEndElement();
                    }
                }
                else if (xi.Name == "value" && xi.IsStartElement())
                {
                    while (xi.Value == string.Empty)
                        xi.Read();
                    featureIdx.SetValAtIdx(vcount, xi.Value);
                    ++vcount;
                }
            }
            xi.Close();
            fs.Close();
            xo.Close();
            tfso.Close();
            fso.Close();
        }
Example #11
0
 public static void WriteHeader(XmlTextReader xi, XmlTextWriter xo)
 {
     while (xi.Read())
     {
         if (xi.NodeType == XmlNodeType.Element && xi.IsStartElement())
         {
             if (xi.Name == "dataset")
             {
                 xo.WriteStartElement(xi.Name); // dataset
                 xo.WriteAttributes(xi, true);
                 break;
             }
         }
         else
         {
             xo.WriteNode(xi, true);
         }
     }
     while (xi.Read())
     {
         if (xi.IsStartElement())
         {
             if (xi.Name == "header")
             {
                 xo.WriteStartElement(xi.Name);
                 xo.WriteAttributes(xi, true);
                 break;
             }
         }
     }
     while (xi.Read())
     {
         if (xi.IsStartElement())
         {
             if (xi.Name == "attributes")
             {
                 xo.WriteNode(xi, true);
                 xo.WriteEndElement(); // header
                 break;
             }
         }
     }
     while (xi.Read())
     {
         if (xi.IsStartElement())
         {
             xo.WriteStartElement(xi.Name);
             xo.WriteAttributes(xi, true);
             if (xi.Name == "instances")
             {
                 break;
             }
         }
     }
 }