Доброе утро -
Мне интересно посмотреть на эффективный способ анализа значений текстового файла heirarchical (т. Е. Файла с заголовком => Несколько заголовков => Несколько подзаголовков => Несколько ключей => Несколько Значения) в простой документ XML. Для простоты ответ будет написан с использованием:
- Regex (желательно на PHP)
- или код PHP (например, если циклы были более эффективными)
Вот пример файла инвентаря, с которым я работаю. Обратите внимание, что заголовок = FOODS , подзаголовок = тип (A, B ...) , ключи = PRODUCT (или CODE и т. Д.) и значения может иметь еще одну строчку.
**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
И вот желаемый вывод (прошу прощения за любые синтаксические ошибки XML):
<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 -->
Пока что мой подход (который может быть довольно неэффективным при использовании огромного текстового файла) будет одним из следующих:
Циклы и несколько операторов Select / Case , где файл загружается в строковый буфер, и, просматривая каждую строку, проверяет, соответствует ли он одной из строк заголовка / подзаголовка / ключа , добавьте соответствующий тег xml к строковой переменной xml, а затем добавьте дочерние узлы в xml на основе инструкций IF относительно того, какое имя ключа является самым последним (что кажется трудоемким и подверженным ошибкам, особенно если текст меняется даже немного) - ИЛИ
Используйте REGEX (регулярные выражения) , чтобы найти и заменить ключевые поля соответствующими тегами XML, очистить их с помощью библиотеки XML и экспортировать файл XML. Проблема в том, что я почти не использую регулярные выражения, поэтому мне нужна помощь на основе примеров .
Буду признателен за любую помощь или совет.
Спасибо.