1

问题背景:

我有一个包含大量目录、文件、附件和 JavaScript 的文件夹。有一个主核心文件由 ActiveX 处理以生成一个“JS 树”类型的结构,该结构在嵌套表之后由嵌套表组成。简而言之,这很糟糕。

我遇到的问题是将其加载到数据库中,以便他们可以将状态应用于相关内容。

解析 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 节点值以在表中创建它的“索引”。

我希望解决方案比我预期的更简单。建议,正确方向的刺激将不胜感激。

我计划在 CakePHP 中使用 TreeBehavior 来管理它,但我不一定必须使用它来处理文件。

4

1 回答 1

1

我可能弄错了,但不是:

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

给你结构的 nodeId 和它的匹配父级?所以你知道那EFCCA56742074A2A859FD1C547850ABA是一个孩子A6F7E2F0728147BB88429545A6C490CA吗?

在 RDBMS 中存储树形数据结构是一个很长的故事,因为 RDBMS 没有层次结构的概念,但是有各种模型可以让您完成这样的任务。您可以查看http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures以开始使用。

邻接表可能是最简单的方法,但如果你使用 mySQL,因为它没有递归查询,这意味着你必须做很多连接才能到达最后一个节点或处理树你的应用层。

于 2012-02-09T09:32:14.363 回答