Üçüncü taraf bir satıcı tarafından kullanılmak üzere bir sistemden aktarılan verileri temsil eden oldukça büyük miktarda XML dosyam var. Her XML dosyası için 2.500 kayıtta sonuçlar doğramaktaydım, çünkü dosyalar devasa ve yönetilemez hale geliyor. Ancak, üçüncü taraf satıcı, bu XML dosyalarının tümünü tek bir dosyada birleştirmemi istedi. Bu XML dosyalarının 78'i var ve bunların boyutu 700 MB'nin üzerinde! Çılgın, biliyorum ... Peki bu dosyaları C# kullanarak satıcıya uyum sağlamak için nasıl birleştirirdiniz? Umarım bir kez xml benzer şekilde olduğunu burada bir yargıda bulunmak ve kabul edeceğimAynı şema ile birlikte 2'den fazla xml dosyalarını birleştirmek için C# 'daki en etkili yol nedir?
Aynı şema ile birlikte 2'den fazla xml dosyalarını birleştirmek için C# 'daki en etkili yol nedir?
cevap
LINQ :-) kullanmada tüm dosyaları içinde okumadan bunu yapmanın bir gerçek verimli bir yolu vardır:
<records>
<record>
<dataPoint1/>
<dataPoint2/>
</record>
</records>
Böyle bir durumda, bir dosya akışı açıp <records>
bölümünü yazıp her XML dosyasını sırayla açıp tüm satırları (ilk ve sonuncu hariç) diske yazdım. Bu sayede hafızada büyük bir dizge yok ve kod yazıp çalıştırmak için çok hızlı olmalı.
public void ConsolidateFiles(List<String> files, string outputFile)
{
var output = new StreamWriter(File.Open(outputFile, FileMode.Create));
output.WriteLine("<records>");
foreach (var file in files)
{
var input = new StreamReader(File.Open(file, FileMode.Open));
string line;
while (!input.EndOfStream)
{
line = input.ReadLine();
if (!line.Contains("<records>") &&
!line.Contains("</records>"))
{
output.Write(line);
}
}
}
output.WriteLine("</records>");
}
DataSet.ReadXml()
, DataSet.Merge()
ve DataSet.WriteXml()
. Çerçevenin sizin için işi yapmasına izin verin. Böyle
şey: Daha fazla bilgi ve örnekler için
public void Merge(List<string> xmlFiles, string outputFileName)
{
DataSet complete = new DataSet();
foreach (string xmlFile in xmlFiles)
{
XmlTextReader reader = new XmlTextReader(xmlFile);
DataSet current = new DataSet();
current.ReadXml(reader);
complete.Merge(current);
}
complete.WriteXml(outputFileName);
}
, Microsoft'tan this article bakabilirsiniz.
Bu, aldığım orijinal yoldu. Sorun, sürecin bir gig RAM'i kullanarak sona ermesiydi! –
- 1. En etkili yol
- 2. J Haskell'in foldl1'inin uygulanmasında en etkili yol nedir? Haskell'de
- 3. Verileri birden çok tablodan birleştirmek için etkili bir yol
- 4. İki vektörü R'de lockstep olarak sıralamak için en etkili yol?
- 5. Vim kullanarak metinleri tekrar tekrar kaldırmak en etkili yol nedir?
- 6. NetworkX'te bir düğümü taşımak/yeniden adlandırmak için en etkili yol nedir?
- 7. Doğrudan Ben bu basit C/C++ işlemi yapmak için en etkili/doğrudan yol arıyorum
- 8. Vektörde bir elemanı sıralamak için en etkili yol?
- 9. WebGL'yi öğrenmek için en iyi yol nedir?
- 10. Elf dosyalarını okumak için doğru yol C
- 11. C# daki eşzamansız HttpWebRequest istisnalarını işlemenin en iyi yolu nedir?
- 12. 128 bit SSE vektöründen 32 bit tamsayı değerlerini yüklemek ve çıkarmak için en etkili yol nedir?
- 13. Jquery sayfalama ve geçmiş eklentilerini birlikte kullanmanın en etkili yolu
- 14. En iyi yol C#
- 15. Aşağıdaki dizeyi biçimlendirmenin en etkili yolu nedir?
- 16. Boş ListBuffer oluşturmanın en etkili yolu nedir?
- 17. Vidaları işlemek için etkili bir yol RxJava
- 18. Yay ile birlikte xml ve java yapılandırması
- 19. Yay mvc: Birden fazla gönderme düğmesi için en temiz yol?
- 20. Java'da farklı zaman aralıklarında birçok şeyi çalıştırmak için en etkili yol nedir? 6
- 21. Bu iki foreach döngüsünü yapmanın en etkili yolu nedir?
- 22. Python'da bir ağacı hareket ettirmenin en etkili yolu nedir?
- 23. En etkili yolu
- 24. C++ 'daki Sezar şifresi
- 25. En etkili yolu
- 26. Bir zaman (veya zaman aralığı) doldurmanın en etkili yolu nedir?
- 27. Bir hiyerarşide farklı sınıfları aynı özelliklerle ele almanın en etkili yolu nedir?
- 28. xml şema, ondalık değer
- 29. Kümeler ve alıcılar oluşturmak için C# 'daki sözdizimi nedir?
- 30. Python: xml şema özniteliklerini lxml
Bu en hızlı yol olacak, ama biraz 'hacky'. –
En iyi ihtimalle, 'hacky' kabul edildi: p DataSet.Merge çok daha zarif görünüyor, ancak ne kadar bellek verimli olacağını hiçbir fikrim yok. – JustLoren
Her XML dosyasına yapılan şemaya sahibim, bu daha da fazla 'hacky' olurdu –