Günaydın -
Ben içine bir heirarchical metin dosyası (yani, Title => Birden Başlıklar => Çoklu Alt başlıklar => Birden Keys => Çoklu Değerler olan birinin) değerlerini ayrıştırma verimli bir şekilde görmeye ilgileniyorum basit bir XML belge. Basitlik için, cevap kullanılarak yazılmış olacaktır:
- Regex (tercihen PHP)
- veya, PHP kodu (örn., döngüler daha verimli olsaydı)
İşte ben çalışıyorum bir Envanteri dosyasının bir örneği. Kafa = FOODS, Sub-kafa vuruşu = Type (A, B...), Keys = PRODUCT (or CODE, etc.) ve Değerleri bir daha fazla satır olabilir unutmayın.
**FOODS - TYPE A**
___________________________________
**PRODUCT**
1) Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese;
2) La Fe String Cheese
**CODE**
Sell by date going back to February 1, 2009
**MANUFACTURER**
Quesos Mi Pueblito, LLC, Passaic, NJ.
**VOLUME OF UNITS**
11,000 boxes
**DISTRIBUTION**
NJ, NY, DE, MD, CT, VA
___________________________________
**PRODUCT**
1) Peanut Brittle No Sugar Added;
2) Peanut Brittle Small Grind;
3) Homestyle Peanut Brittle Nuggets/Coconut Oil Coating
**CODE**
1) Lots 7109 - 8350 inclusive;
2) Lots 8198 - 8330 inclusive;
3) Lots 7075 - 9012 inclusive;
4) Lots 7100 - 8057 inclusive;
5) Lots 7152 - 8364 inclusive
**MANUFACTURER**
Star Kay White, Inc., Congers, NY.
**VOLUME OF UNITS**
5,749 units
**DISTRIBUTION**
NY, NJ, MA, PA, OH, FL, TX, UT, CA, IA, NV, MO and IN
**FOODS - TYPE B**
___________________________________
**PRODUCT**
Cool River Bebidas Naturales - West Indian Cherry Fruit Acerola 16% Juice;
**CODE**
990-10/2 10/5
**MANUFACTURER**
San Mar Manufacturing Corp., Catano, PR.
**VOLUME OF UNITS**
384
**DISTRIBUTION**
PR
Ve burada istenilen çıkış (herhangi bir XML söz dizimi hataları lütfen bağışlayın) bulunuyor:
<foods>
<food type = "A" >
<product>Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese</product>
<product>La Fe String Cheese</product>
<code>Sell by date going back to February 1, 2009</code>
<manufacturer>Quesos Mi Pueblito, LLC, Passaic, NJ.</manufacturer>
<volume>11,000 boxes</volume>
<distibution>NJ, NY, DE, MD, CT, VA</distribution>
</food>
<food type = "A" >
<product>Peanut Brittle No Sugar Added</product>
<product>Peanut Brittle Small Grind</product>
<product>Homestyle Peanut Brittle Nuggets/Coconut Oil Coating</product>
<code>Lots 7109 - 8350 inclusive</code>
<code>Lots 8198 - 8330 inclusive</code>
<code>Lots 7075 - 9012 inclusive</code>
<code>Lots 7100 - 8057 inclusive</code>
<code>Lots 7152 - 8364 inclusive</code>
<manufacturer>Star Kay White, Inc., Congers, NY.</manufacturer>
<volume>5,749 units</volume>
<distibution>NY, NJ, MA, PA, OH, FL, TX, UT, CA, IA, NV, MO and IN</distribution>
</food>
<food type = "B" >
<product>Cool River Bebidas Naturales - West Indian Cherry Fruit Acerola 16% Juice</product>
<code>990-10/2 10/5</code>
<manufacturer>San Mar Manufacturing Corp., Catano, PR</manufacturer>
<volume>384</volume>
<distibution>PR</distribution>
</food>
</FOODS>
<!-- and so forth -->
Şimdiye kadar, benim yaklaşım (büyük bir metin dosyası ile oldukça verimsiz olabilir) aşağıdakilerden biri olacaktır:
Loops and multiple Select/Case statements, dosya bir dize tamponuna yüklenir ve her bir hat aracılığıyla döngü iken başlık / alt-başlık / anahtar hatlarından birini eşleşirse, bir xml dize değişkeni için uygun xml etiketi ekleme, bakın nerede, ve ardından dayalı xml için alt düğümü eklemek IF anahtar adı en çok (esp metin hatta biraz değiştirirse, zaman alıcı ve hata eğilimli görünüyor.) yeni olduğu ile ilgili ifadeler - VEYA
Use REGEX (Regular Expressions) bulmak ve uygun xml etiketleri ile anahtar alanları yerine, bir xml kütüphane ile bunu temizlemek, ve xml dosyasını vermek. Sorun ben ancak normal ifadeler kullanmak olduğunu, bu yüzden bazı example-based yardımına ihtiyacım var.
Herhangi bir yardım veya tavsiye mutluluk duyacağız.
Teşekkürler.