
現在このようなコードを作っています
c#
1using System; 2using System.IO; 3using System.IO.Compression; 4using System.Linq; 5using System.Xml.Linq; 6 7namespace XMLTutorial20200912 8{ 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 string xmldoc = 14 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + 15 "<PCROOT>" + 16 "<PInfo Key=\"0\">" + 17 "oll" + 18 "</PInfo>" + 19 "<PInfo Key=\"0\">" + 20 "tll" + 21 "</PInfo>" + 22 "<PInfo Key=\"1\">" + 23 "ools" + 24 "</PInfo>" + 25 "<PInfo Key=\"1\">" + 26 "oljl" + 27 "</PInfo>" + 28 "<PInfo Key=\"1\">" + 29 "ollj" + 30 "</PInfo>" + 31 "</PCROOT>"; 32 33 XDocument xdoc = XDocument.Parse(xmldoc); 34 Console.WriteLine(xdoc.ToString()); 35 GZipCompress(xdoc, @"pc1.gz"); 36 XDocument xdocloaded= GZipDecompress(@"pc1.gz"); 37 38 var key0 = xdocloaded.Element("PCROOT").Elements("PInfo").Where(p => p.Attribute("Key").Value == "1"); 39 foreach(var i in key0) 40 { 41 Console.WriteLine(i.Value); 42 } 43 Console.ReadKey(); 44 } 45 public static void GZipCompress(XDocument xdin, string gzpath) 46 { 47 using (var memStream = new MemoryStream()) 48 { 49 xdin.Save(memStream, SaveOptions.None); 50 using (var fout = File.Create(gzpath)) 51 { 52 using (var gzout = new GZipStream(fout, CompressionMode.Compress)) 53 { 54 memStream.WriteTo(gzout); 55 } 56 } 57 } 58 } 59 public static XDocument GZipDecompress(string gzpath) 60 { 61 using (var fin = new FileStream(gzpath, FileMode.Open, FileAccess.Read, FileShare.Read)) 62 { 63 using (var fout = new MemoryStream()) 64 { 65 using (var gzin = new GZipStream(fin, CompressionMode.Decompress)) 66 { 67 gzin.CopyTo(fout); 68 var res = XDocument.Load(fout);//here 69 return res; 70 } 71 } 72 } 73 } 74 } 75}
このコードの解凍部分(hereの部分です)でタイトルのエラーが発生してしまいます。元の文字列にはROOTととらえられる部分が含まれているのですが、どこを修正すべきなのでしょうか。もしくはGZ圧縮で改変が起こってしまったのでしょうか。(そのようなことはないとは思いますが)
文字列をXDocumentにした後、コンソール出力してみましたが、入力したものにインデントが入ったものがそのまま出力されていました。
回答2件
あなたの回答
tips
プレビュー