SORU
14 Mart 2010, Pazar


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
14 Mart 2010, Pazar


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;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly

    Elly

    3 EKİM 2005
  • RocketJump

    RocketJump

    22 ŞUBAT 2006
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010