public static string ReadXMLEntry(string xmlFile, XMLLocationEntry entry) { StringBuilder sb = new StringBuilder(); using (FileStream fs = new FileStream(xmlFile, FileMode.Open, FileAccess.Read)) { byte[] data = new byte[entry.Length]; fs.Seek(entry.Location, SeekOrigin.Begin); int read = fs.Read(data, 0, data.Length); sb.Append(System.Text.Encoding.UTF8.GetString(data)); } return(sb.ToString()); }
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); }