2011-05-12 78 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";