コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }