XmlReader Xml okuma C#
Aşağıdaki Xml belgesi elimden geldiğince hızlı okuma ve ek dersler her alt blok okuma yönetmesine izin vermek için çalışıyorum.
<ApplicationPool>
<Accounts>
<Account>
<NameOfKin></NameOfKin>
<StatementsAvailable>
<Statement></Statement>
</StatementsAvailable>
</Account>
</Accounts>
</ApplicationPool>
Ancak, XmlReader nesne her Hesap ve daha sonra okumak için kullanmaya çalışıyorum."". StatementsAvailable XmlReader kullanarak önerirsin.Ve her öğe okuma kontrol ve idare?
Derslerimi ayırma her düğüm düzgün işlemek için düşündüm. Yani gidecekseniz NameOfKin ve hesabı ile ilgili diğer bazı özellikler okuyan XmlReader bir örneği kabul eden AccountBase bir sınıf. Sonra ifadelerine göre, interate istiyordum ve başka bir sınıfı kendi Deyimi hakkında doldurun (ve daha sonra bir IList ekleyin).
Böylece "sınıf" bitti XmlReader yaparak parçasıdır.başına var uzakta() ReadElementString ama nasıl işaretçi StatementsAvailable öğe taşımak için söylemek egzersiz ve beni onların arasında dolaşmak ve başka bir sınıf bu proeprties her okuyalım izin veremem.
Kolay geliyor!
CEVAP
XmlReader
deneyimimi çok kolay yanlışlıkla çok fazla okumak. Mümkün olan en kısa sürede okumak, ama sana sahip olmak istiyorum dediçalıştıDOM bir model kullanmak yerine? XML için XML ETMENİZ çok iş yapar buldumçokdaha kolay.
Eğer belgenizin özellikle büyük, birleştirebilirsiniz XmlReader
ve SERİ XML oluşturarak bir XElement
XmlReader
Her bir "dış" unsurlar bir akış şekli: bunu sağlar mı en dönüşüm çalışmalarına ETMENİZ için XML, ama hala tek ihtiyacınız olan küçük bir kısmı belgede bellek herhangi bir zaman. İşte bazı örnek kod (biraz this blog post uyarlanmıştır):
static IEnumerable<XElement> SimpleStreamAxis(string inputUrl,
string elementName)
{
using (XmlReader reader = XmlReader.Create(inputUrl))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == elementName)
{
XElement el = XNode.ReadFrom(reader) as XElement;
if (el != null)
{
yield return el;
}
}
}
}
}
}
Bu başka bir biçime StackOverflow kullanıcı verileri büyük olan) önce dönüştürmek için kullandım çok iyi çalışıyor.
"Sorun için sevk ediliyor..." dedi . çok okumak çok açık olmasa da radarbob, Jon tarafından reformasyon DÜZENLE -
Bu sadece iç içe ve bakımı "çok" sorun. bir okumalısınız
using (XmlReader reader = XmlReader.Create(inputUrl))
{
reader.ReadStartElement("theRootElement");
while (reader.Name == "TheNodeIWant")
{
XElement el = (XElement) XNode.ReadFrom(reader);
}
reader.ReadEndElement();
}
Bu "bir çok döngü desen ise klasik uygular, çünkü" sorun: oku ilgilenir
initial read;
(while "we're not at the end") {
do stuff;
read;
}
okuma varlıkların dosya...
Okuma dize içerik dosyası .Net Kompakt...
Okuma Web için bir anahtar.Config Conf...
Nasıl ve C XML dosyası okuma ayrıştırm...
Okuma belirli çizgiler sadece (Python)...