2010-01-29 13 views
0

Если вы можете помочь в этом, вы гений.Анализ SGML и сохранение его в массиве PHP

В принципе, у меня будет какой-то текст, как это:

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

Здесь появляется «джейн» вне всяких тегов и <hobbies> появляются между некоторыми тегами.

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

Спасибо.

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

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

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

+0

Я не думаю, что jane вне тега будет проблемой, поскольку это всего лишь содержимое тега. проблема была бы может быть изменена на или Josh

+4

Ну, это файл XML, и вы должны держаться подальше от обычного выражения, чтобы прочитать его. –

+4

Пожалуйста, попробуйте создать более описательное название вопроса. –

ответ

2

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

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

jane будет в атрибут child элемента nodeValue, когда анализируется с SimpleXML.

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

+0

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

+3

Тогда я не понимаю, в чем ваш вопрос. Можете ли вы привести пример того, как вам нужно выглядеть? –

+0

Возможно, вы неправильно поняли? Я перефразировал свой ответ. –

0

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

+0

Но проблема с YAML остается прежней. Клиент хочет смешивать обычный текст с тегами. Например: jenny .. другой текст ... Это проблема. Может ли YAML помочь с этим, если да, то как? –

+0

@Click Upvote: Почему вы хотите, чтобы клиент редактировал необработанный XML? «Ты входишь в мир боли». Дайте им приличный пользовательский интерфейс, чтобы громко кричать. –

+0

Конечно, предоставление пользовательского интерфейса было бы лучшим вариантом! Я думал, что есть святая причина держать его в текстовом файле! Второй лучший yaml :) – yannis

2

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

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

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

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