/// <summary> /// doorzoekt xml file naar eerste "rootbegin" text en vervangt dan "count" /// door nieuwe aantal. De tekst wordt "hard" overschreven. We gaan ervan uit dat we /// 00000000000 dus 11 cijfers kunnen wegschrijven! /// </summary> /// <param name="xmlFile"></param> /// <param name="rootBegin"></param> /// <param name="count"></param> public static void OverwriteCOUNTAttribute(string xmlFile, string rootBegin, int count) { long countPos = -1; using (TextPositionFileReader textReader = new TextPositionFileReader(xmlFile)) { while (!textReader.EOF) { long linePosition; string line = textReader.ReadLine(out linePosition); if (line.Length > 0) { int index = line.IndexOf(rootBegin); if (index >= 0) { // gevonden root // Nu count opzoeken index = line.IndexOf("count=\""); if (index >= 0) { countPos = linePosition + index + 7; // We zijn klaar break; } } } } //while } //using if (countPos >= 0) { using (FileStream fs = new FileStream(xmlFile, FileMode.Open, FileAccess.ReadWrite)) { fs.Seek(countPos, SeekOrigin.Begin); byte[] data = System.Text.Encoding.ASCII.GetBytes(string.Format("{0:00000000000}", count)); if (data.Length != 11) { // MOET 11 posities zijn! return; } fs.Write(data, 0, data.Length); } //using } }
public static bool ScanXMLFile(string xmlFile, string startText, string endText, out List <XMLLocationEntry> locationList, XMLPieceCompleted dXMLPieceCompleted) { bool result = false; locationList = new List <XMLLocationEntry>(); try { using (TextPositionFileReader textReader = new TextPositionFileReader(xmlFile)) { XMLLocationEntry entry = new XMLLocationEntry(); StringBuilder textEntry = new StringBuilder(1024 * 50); while (!textReader.EOF) { long linePosition; string line = textReader.ReadLine(out linePosition); if (line.Length > 0) { if (entry.Location < 0) { // We zoeken een start int startIndex = line.IndexOf(startText); if (startIndex >= 0) { // We hebben een start tag gevonden! entry.Location = linePosition + startIndex; // voeg data toe aan string textEntry.Append(line.Substring(startIndex)); } } else { // We zoeken een "eind punt" int startIndex = line.IndexOf(endText); if (startIndex >= 0) { // We hebben een end tag gevonden! entry.Length = (linePosition + startIndex + endText.Length) - entry.Location; textEntry.Append(line.Substring(0, startIndex + endText.Length)); // Kijk of we het "stuk naar xml kunnen converten (zoja, dan zal het een correct // stuk zijn) bool addEntry = true; XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(textEntry.ToString()); // Nu event afvuren zodat we wat mee gedaan kan worden if (dXMLPieceCompleted != null) { addEntry = dXMLPieceCompleted(xmlDoc, entry); } } catch { addEntry = false; } if (addEntry) { locationList.Add(entry); } // We gaan verder en begin met zoeken naar nieuwe begin tag entry = new XMLLocationEntry(); textEntry = new StringBuilder(1024 * 50); } else { // We zitten ergens tussen begin en eind tag textEntry.Append(line); } } } } //while; } //using result = true; } catch { } return(result); }