This document already has an 'XmlDeclaration' node
XmlDocument xmldoc = new XmlDocument();
XmlNode xmlnode, xmlroot;
con = new System.Data.SqlClient.SqlConnection();
DataSet ds = new DataSet();
con.ConnectionString = @"...snip...";
con.Open();
MessageBox.Show("Database Connected");
String sql = "select Pdf_tag,Styles from Xml_Tags";
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
{
string line = objReader.ReadLine();
开发者_如何学Python 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";
for (int i = 0; i < maxrows; i++)
{
dRow = ds.Tables["xml"].Rows[i];
if(dRow[0].ToString ()!=line)
{
XmlNode docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(docNode);
String sqll = "select Dtd_Tag,Dtd_Attribute_Name from Xml_Tags,Mapped_Tags_Attributes where Mapped_Tags_Attributes.Pdf_Tag=Xml_Tags.Pdf_Tag";
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 name = XmlConvert.EncodeName(dRow1.ItemArray.GetValue(0).ToString());
xmlnode = xmldoc.CreateElement(name);
XmlNode Doc = xmldoc.CreateDocumentType(name, null, "E:\\Rachana_mds\\proj\\pdfextraction\\docbook.dtd", null);
xmldoc.AppendChild(Doc);
String sqlll = "select Dtd_Attribute_Name,Dtd_Tag from Mapped_Tags_Attributes,Xml_Tags where Mapped_Tags_Attributes.Pdf_Tag=Xml_Tags.Pdf_Tag";
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];
xmlroot = xmldoc.CreateElement(dRow1.ItemArray.GetValue(0).ToString());
xmldoc.AppendChild(xmlroot);
XmlAttribute xmlatt = xmldoc.CreateAttribute(dRow2.ItemArray.GetValue(0).ToString());
xmlroot.AppendChild(xmlnode);
xmlnode.InnerText=sub;
}
}
}
}
while (objReader.Peek() != -1);
//string filename = @"E:" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Minute + ".xml";
string filename = @"E:\" + DateTime.Now.ToString("dd/mm/yyyy")+".xml";
xmldoc.Save(filename);
MessageBox.Show("Done");
con.Close();
You only need 1 xmldeclaration node in the document. You're attempting to add one for each iteration of the loop..
with your for
loop with i=0
this code runs
XmlNode docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(docNode);
and adds an XMLDeclaration
to xmldoc
, all things end in the for loop with i=0
, then i
becomes 1
with i++
afterwards the same for
loop works for i=1
and this code works again
XmlNode docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(docNode);
which tries to add another XMLDeclaration
to xmldoc
and gives you that error you mentioned. What you can do to get rid of this error is writing this code
XmlNode docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(docNode);
outside your loops both for
and do-while
and based on what you want you can take this code
XmlDocument xmldoc = new XmlDocument();
just before this one
XmlNode docNode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(docNode);
but then you will have so many xmldoc
and you will lose them if you don't save them in a List
.
In addition to all those above, I suggest you to write your codes more object-oriented.You can create another method for that for
loop for example.Try to seperate your methods, divide and conquer.
精彩评论