Разбор SGML и сохранение его в массиве PHP - PullRequest
0 голосов
/ 29 января 2010

Если вы можете помочь с этим, вы гений.

По сути, у меня будет такой текст:

<parent wealthy>
   <parent>
      <children female>
        <child>
          jessica
          <hobbies>
            basketball, soccer, video games
          </hobbies>
        </child>
        <child>
          jane
          <hobbies>
            cooking, shopping, boys
          </hobbies>
        </child>         
      </children female>
      <children male>
       <child>
         josh
         <hobbies>
           tennis, swimming
         </hobbies>
       </child>
      </children male>
    </parent>
   </parent wealthy>
   <parent poor>
     <parent>
       <children male>
         <child>
          ---
          <hobbies>...</hobbies>
         </child>
       </children male>
     </parent>
   </parent poor>

Итак, у меня будет иерархия родитель-потомок, подобная этой:

- parent wealthy/ parent poor /parent something else
  -- parent
     -- children male/ children female / children something else
        -- child
         -- (name of the child is given without any tags around it)
         -- hobbies

Мне интересно, как я могу разобрать всю эту информацию и сохранить ее в массиве / объекте / переменной php, сохраняя порядок, в котором они появляются? Например, если <parent wealthy> появляется выше <parent poor>, я бы хотел сохранить их в том же порядке, и то же самое происходит, если <children male> появляется до <children female>.

Это был бы почти совершенно правильный XML, и я мог бы использовать SimpleXML для его анализа, однако проблема в том, что имя потомка не появляется между тегами, и клиент хочет сохранить его таким, чтобы он был удобен для пользователя. например:

    <child>
      jane
      <hobbies>
        cooking, shopping, boys
      </hobbies>
    </child>      

Здесь 'jane' появляется вне любых тегов, а <hobbies> появляется между некоторыми тегами.

Как это можно проанализировать? Пожалуйста, дайте несколько советов. Если вы предлагаете использовать регулярные выражения, пожалуйста, укажите регулярные выражения, которые можно использовать для принятия вашего ответа, поскольку я не знаю регулярных выражений.

Спасибо.

Редактировать: Основная проблема заключается в том, что клиент хочет смешать обычный текст с текстом в тегах. Например:

text text test <hobbies>...<hobbies>. text text text <age>30</age>

Как это можно разобрать?

Ответы [ 3 ]

2 голосов
/ 29 января 2010

Я чувствую, что люди пытаются ответить на вопрос с технической точки зрения, но проблема здесь в процессе.

Почему? Ваш клиент настаивает на вводе таких данных? Это совершенно нелепо. Вам даже снится кошмар, подтверждающий это. Не говоря уже о том, чтобы правильно его проанализировать.

Скажите ему / ей, что вы выберете для них достойный пользовательский интерфейс, выберите свой собственный механизм хранения, и он устранит все проблемы / проблемы и неправильное форматирование, которые будут у пользователей, введя его так. Это безумие .

Еще одна совершенно другая вещь, которую стоит отметить, это то, что кажется, что дети происходят от одного из родителей. Я не знал, что homo sapiens был автогамным.

2 голосов
/ 29 января 2010

При использовании разметки вот так:

<child>
  jane
   <hobbies>
    cooking, shopping, boys
   </hobbies>
 </child>     

jane будет находиться в атрибуте nodeValue элемента child при анализе с SimpleXML.

Просто запомните trim() значение, так как оно может содержать пробелы из-за следующих тегов.

0 голосов
/ 29 января 2010

Я видел ваш ответ на одном из ответов как ... клиент хочет, чтобы он был удобен для пользователей, чтобы он набирал это. Структура XML является одним из самых недружественных способов ввода информации. На самом деле это в значительной степени мазохистское, лучше использовать yaml yaml и проанализировать его с помощью spyc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...