Разбор большого XML-файла с PHP с нестандартным вложением элементов (SAP Roadmap File) - PullRequest
1 голос
/ 09 февраля 2012

История вопроса:

У меня есть папка с множеством каталогов, файлов, вложений и JavaScript.Существует основной файл ядра, который обрабатывается ActiveX для создания структуры типа «JS Tree», состоящей из вложенной таблицы после вложенной таблицы.Короче говоря, это ужасно.

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

Анализ файла XML неОбязательно проблема для меня, однако, чтобы структура работала правильно.Файл не вложен в логической манере, которая могла бы легко создать структуру в базе данных / файловой системе.Файл XML состоит из Structure узлов, которые содержат немного информации об этом узле и любом соответствующем контенте в файловой системе.

Я думал о загрузке его в структуру типа MPTT, но логически анализировал различные узлыв то, что состоит из отношений Ребенок / Родитель, где я спотыкаюсь.Ниже приведен пример этого XML-файла:

   <Structure nodeid="9D565FD65DE9464EA36F005866DBF3AE" ParentID = "6EEB45ED97634C9BB2730D7713255673" IsAddOnNode="True" IsCoreNode = "0" >
      <Name>POS specific remarks</Name>
      <Sequence>1</Sequence>
      <WBS>1.1.3.1</WBS>
      <BackgroundColor>#80FF00</BackgroundColor>
      <FontColor>Black</FontColor>
      <Comments></Comments>
      <References></References>
   </Structure>
   <Structure nodeid="A6F7E2F0728147BB88429545A6C490CA" ParentID = "B17AB99B64664624AAA41E220A9EAE59" IsAddOnNode="False" IsCoreNode = "0" >
      <Name>Execution, Monitoring, and Controlling of Results</Name>
      <Sequence>4</Sequence>
      <WBS>1.1.4</WBS>
      <BackgroundColor></BackgroundColor>
      <FontColor>White</FontColor>
      <Comments>
         <Comment AddOnID = "53539AB26B50472CAA2DF4E428605C87" Version="0.2"></Comment>
      </Comments>
      <References></References>
   </Structure>
   <Structure nodeid="EFCCA56742074A2A859FD1C547850ABA" ParentID = "A6F7E2F0728147BB88429545A6C490CA" IsAddOnNode="False" IsCoreNode = "0" >
      <Name>Project Performance Reports</Name>
      <Sequence>1</Sequence>
      <WBS>1.1.4.1</WBS>
      <BackgroundColor></BackgroundColor>
      <FontColor>White</FontColor>
      <Comments></Comments>
      <References></References>
   </Structure>

Когда он был проанализирован с помощью ActiveX, структура (на левой навигационной панели) организована в виде стандартного контура или упорядоченного списка:

1. Project Preparation

 1.1 Project Management

     1.1.1 Phase Star-Up

           1.1.1.1 Item 1

           1.1.1.2 Item 2

           1.1.1.3 Item 3

И так далее.Насколько я понимаю, эти значения, которые обозначают раздел или подраздел (1.1.1.2), хранятся в теге WBS узла Structure.Я думаю, что мне нужно сделать, это разобрать их и создать структуру в соответствии с этим.Как это сделать, вот где я в тупике.

Кроме того, есть также узел Sequence, который отправляет данные для хранения информации о том, какой индексный дочерний элемент находится вне его родительского элемента.

То, что я хотел бы сделать

Я хотел бы создать группу записей в базе данных (желательно в MPTT), чтобы я мог легко сгенерировать дерево навигации и затем начатья беспокоюсь о том, чтобы «очистить» все отдельные файлы, чтобы я мог также хранить их содержимое в базе данных.Почему-то мне нужно проанализировать значение WBS-узла, чтобы создать его «индекс» в таблице.

Я надеюсь, что решение будет более простым, чем я ожидал.Предположим, что программа в правильном направлении будет принята с благодарностью.

Я планировал использовать TreeBehavior в CakePHP для управления этим, но мне не обязательно использовать это для обработки файла.

1 Ответ

1 голос
/ 09 февраля 2012

Я могу ошибаться, но разве:

<Structure nodeid="EFCCA56742074A2A859FD1C547850ABA" ParentID = "A6F7E2F0728147BB88429545A6C490CA">

не дает вам идентификатор узла структуры и соответствующий родительский элемент этого?Итак, вы знаете, что EFCCA56742074A2A859FD1C547850ABA является потомком A6F7E2F0728147BB88429545A6C490CA?

Хранение древовидной структуры данных в RDBMS - это долгая история, так как RDBMS не имеет концепции иерархии, но существуют различные модели, которыепозволит вам выполнить такую ​​задачу.Вы можете проверить http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures, чтобы начать.

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

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