Это должно помочь вам:
for (int i = nodeList.Count - 1; i >= 0; i--)
{
nodeList[i].ParentNode.RemoveChild(nodeList[i]);
}
Если вы зациклились, используя обычный цикл for, и зациклили его «назад», вы можете удалять элементы по ходу.
Обновление: вот полный пример, включающий загрузку XML-файла, поиск узлов, их удаление и сохранение файла:
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNodeList nodes = doc.SelectNodes("some-xpath-query");
for (int i = nodes.Count - 1; i >= 0; i--)
{
nodes[i].ParentNode.RemoveChild(nodes[i]);
}
doc.Save(fileName);
ZLIB и DEFLATE - это не одно и то же. Существует набор из трех связанных спецификаций сжатия, определенных в IETF RFC:
Все они используют (в основном) конкретный алгоритм сжатия - DEFLATE.
Первый, ZLIB, включает в себя байты кадрирования. Согласно RFC 1950 ...
A zlib stream has the following structure:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
(if FLG.FDICT set)
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
CMF и FLG являются байтами. Как сказано в спецификации, основным методом сжатия , используемым в ZLIB, является DEFLATE, хотя спецификация может использоваться с другими методами. В общем, нет. Кроме того, DICTID обычно не используется . Следовательно, каждый поток байтов ZLIB имеет 2 байта, за которыми следует поток сжатых данных, за которым следует контрольная сумма Adler32. Сжатые данные представляют собой чистый поток байтов от DEFLATE.
Это касается того, чем ZLIB отличается от DEFLATE как формата. GZIP - это третий формат. Если вам нужны подробности, проверьте RFC. Ключевым моментом является то, что, как и ZLIB, GZIP в основном использует DEFLATE и помещает заголовок перед сжатым потоком данных, а затем контрольную сумму. Но заголовок GZIP отличается от заголовка ZLIB, поэтому любой класс GZipStream не сможет записать поток байтов, который будет читаться как ZLIB. И наоборот.
При чтении потока ZLIB, некоторые люди решают проблему, с которой вы столкнулись , используя встроенный .NET DeflateStream в потоке данных после продвижения потока мимо первых двух байтов кадра ZLIB. Это работает, пока вы хотите ПРОЧИТАТЬ, поток ZLIB использует DEFLATE (безопасное предположение) и не определяет фиксированный словарь (также довольно безопасно), и если вас не заботит проверка целостности, предоставляемая Adler32 (возможно).
Если вам не нравится делать такие предположения или отказываться от проверки, или если вам нужно генерировать поток данных ZLIB, есть ZlibStream в DotNetZip , который будет читать и записывать потоки данных ZLIB за вас, а также проверять или производить контрольную сумму по мере необходимости.
DotNetZip можно использовать бесплатно, работает с любым языком .NET. Вам не нужна полная библиотека DotNetZip, вместо этого вам нужен только Ionic.Zlib.dll.
t заботиться о проверке целостности, предоставляемой Adler32 (возможно).Если вам не нравится делать такие предположения или отказываться от проверки, или если вам нужно генерировать поток данных ZLIB, есть ZlibStream в DotNetZip , который будет читать и записывать потоки данных ZLIB за вас, а также проверять или производить контрольную сумму по мере необходимости.
DotNetZip можно использовать бесплатно, работает с любым языком .NET. Вам не нужна полная библиотека DotNetZip, вместо этого вам нужен только Ionic.Zlib.dll.
t заботиться о проверке целостности, предоставляемой Adler32 (возможно).Если вам не нравится делать такие предположения или отказываться от проверки, или если вам нужно генерировать поток данных ZLIB, есть ZlibStream в DotNetZip , который будет читать и записывать потоки данных ZLIB за вас, а также проверять или производить контрольную сумму по мере необходимости.
DotNetZip можно использовать бесплатно, работает с любым языком .NET. Вам не нужна полная библиотека DotNetZip, вместо этого вам нужен только Ionic.Zlib.dll.
и при необходимости проверить или произвести контрольную сумму.DotNetZip можно использовать бесплатно, работает с любым языком .NET. Вам не нужна полная библиотека DotNetZip, вместо этого вам нужен только Ionic.Zlib.dll.
и при необходимости проверить или произвести контрольную сумму.DotNetZip можно использовать бесплатно, работает с любым языком .NET. Вам не нужна полная библиотека DotNetZip, вместо этого вам нужен только Ionic.Zlib.dll.
Попробуйте использовать System.IO.Compression.DeflateStream
или ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream
. Вы получите поток DEFLATE.
В конце ActiveScript используйте uncompress с параметром deflate: uncompress (CompressionAlgorithm.DEFLATE)
, как предлагает документация ActiveScript. По умолчанию ActiveScript ожидает поток ZLib, который содержит дополнительную информацию по сравнению с потоком DEFLATE.