2011-05-12 314 views
-2
private void btnmap_Click(object sender, EventArgs e) 
{ 
XmlDocument xmldoc = new XmlDocument(); 
       XmlNode xmlnode, xmlroot, docNode, Doc; 
       XmlAttribute xmlatt; 
       docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null); 
       xmldoc.AppendChild(docNode);     
       if (rchtextfile.Text == "") 
       { 
        MessageBox.Show("Please Select a Text file", "File Name Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
       } 
       else 
       { 
        con = new System.Data.SqlClient.SqlConnection(); 
        DataSet ds = new DataSet(); 
        con.ConnectionString = @"Server=MDS-SW02; User ID=sa; Pwd=Admin2011; Initial Catalog=xml;"; 
        con.Open(); 
        MessageBox.Show("Database Connected");      
        String sql = "select Styles from Xml_Tags,pdfelement where Xml_Tags.Mapping_Id=pdfelement.Mapping_Id AND Xml_Tags.Pdf_Tag=pdfelement.Element_Name AND pdfelement.Style=Xml_Tags.Styles"; 
        com = new SqlCommand(sql); 
        da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
        da.Fill(ds, "xml"); 
        maxrows = ds.Tables["xml"].Rows.Count; 
        StreamReader objReader = new StreamReader(file, Encoding.Default, true); 
        do 
        {      
         for (int i = 0; i < maxrows; i++) 
         {       
          dRow = ds.Tables["xml"].Rows[i];        
          line = objReader.ReadLine(); 
          if (line == null) 
          { 
           //xmldoc.Save(ya); 
          } 
          else 
          { 
           string st1 = ">"; 
           string st2 = "</"; 
           int end = line.IndexOf(st2); 
           if (end != -1 && end > 1) 
           { 
            st = line.IndexOf(st1); 
            en = line.IndexOf(st2); 
            int v = en - st; 
            sub = line.Substring(st + 1, v - 1); 
            rchtext.Text = rchtext.Text + sub + "\r\n"; 
           }                 
           String sqll = "select Dtd_Tag from Xml_Tags,pdfelement where Xml_Tags.Mapping_Id=pdfelement.Mapping_Id AND Xml_Tags.Pdf_Tag=pdfelement.Element_Name AND pdfelement.Style=Xml_Tags.Styles"; 
           SqlCommand comm = new SqlCommand(sqll); 
           SqlDataAdapter daa = new System.Data.SqlClient.SqlDataAdapter(sqll, con); 
           DataSet ds1 = new DataSet(); 
           daa.Fill(ds1, "xml"); 
           dRow1=ds1.Tables["xml"].Rows[i];         
           String sqlll = "select Dtd_Attribute_Name from Mapped_Tags_Attributes,Xml_Tags where Mapped_Tags_Attributes.Pdf_Tag=Xml_Tags.Pdf_Tag AND Mapped_Tags_Attributes.Mapping_Id=Xml_Tags.Mapping_Id"; 
           SqlCommand cmd = new SqlCommand(sqlll); 
           SqlDataAdapter dt = new System.Data.SqlClient.SqlDataAdapter(sqlll, con); 
           DataSet ds2 = new DataSet(); 
           dt.Fill(ds2, "xml"); 
           dRow2 = ds2.Tables["xml"].Rows[i]; 
           name = XmlConvert.EncodeName(dRow1.ItemArray.GetValue(0).ToString()); 
           xmlnode = xmldoc.CreateElement(name); 
           Doc = xmldoc.CreateDocumentType(name, null, "E:\\Rachana_mds\\proj\\pdfextraction\\docbook.dtd", null);         
           xmlroot = xmldoc.CreateElement(name);         
           xmlatt = xmldoc.CreateAttribute(dRow2.ItemArray.GetValue(0).ToString()); 
           xmlroot.AppendChild(xmlnode); 
           xmlnode.InnerText = sub;                 
          } 
         } 
        }      
        while (dRow[0].ToString()!=line && !objReader.EndOfStream); 
         MessageBox.Show("Done"); 
         string filename = @"E:" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Minute + ".xml";       
         xmldoc.Save(filename);             
         MessageBox.Show("Successfully saved");            
       }     
       con.Close();    
} 

我得到此行的错误。 ...xmldoc.Save(filename);无效的XML文档,该文档没有根元素

+2

没有人会通过代码来读取。另外,你甚至没有提出问题。请阅读此:http://tinyurl.com/so-hints – 2011-05-12 09:07:10

+0

我的问题是在代码的最后一行.. – rachana 2011-05-12 09:09:38

+2

不,没有问题... – 2011-05-12 09:10:48

回答

4

你永远叫doc.AppendChild(xmlroot);所以虽然你已经创建元素,你从来没有真正把他们在文档中。因此它没有根元素。现在

如果你没有创建根元素,并添加它,你还有一个问题,如果for循环多次执行,因为你会尝试添加多个根。您可能要创建xmlroot外部的循环,然后在内部创建嵌套元素循环。

如果你可以使用.NET 3.5或更高版本和LINQ to XML,很多这样的代码将是简单了很多,顺便......

0

下面的线也是不正确的:

string filename = @"E:" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Minute + ".xml";      

与更换行:

string filename = @"E:\\" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Minute + ".xml";