用块构建XML - 艰难的

时间:2012-03-16 23:13:42

标签: xml xsd xml-parsing

我存在复杂的存储对象XML结构的问题。

第一个对象:

<DetailsStructure>
    <DetailsRelation name="X">
        <Type name="A">
            <Template id="123"/>
        </Type>
    </DetailsRelation>
</DetailsStructure>

第二个对象:

<DetailsStructure>
    <DetailsRelation name="X">
        <Type name="A">
            <Template id="123">
                <DetailsRelation>
                    <Type name="B">
                        <Template id="111">
                            <DetailsRelation>
                                <Type name="C">
                                    <Template id="222">
                                </Type>
                            </DetailsRelation>
                        </Template>
                    </Type>
                </DetailsRelation>
            </Template>
            <Template id="1321" />
        </Type>
    </DetailsRelation>
</DetailsStructure>

让我们说第一个结构是我们最初的结构。我们可以为该结构添加一些节点 最终结构编号为2。 但是,一个节点可以包含整个XML块。例如。我们添加了'template id =“111”' 和'template id =“1321”'到第一个结构。 'template id =“111”'有内部结构 ('template id =“222”')以及对内部结构的每次更改(例如删除 内部'template id =“222”')必须在使用'template id =“111”'的任何地方传播。

我们打开通过以下方式描述的对象:

<DetailsStructure>
    <DetailsRelation>
        <Type name="B">
            <Template id="111">
                <DetailsRelation>
                    <Type name="C">
                        <Template id="222">
                    </Type>
                </DetailsRelation>
            </Template>
        </Type>
    </DetailsRelation>
</DetailsStructure>

并删除一块结构。结果结构:

<DetailsStructure>
    <DetailsRelation>
        <Type name="B">
            <Template id="111"/>
        </Type>
    </DetailsRelation>
</DetailsStructure>

现在,当我打开First对象结构时,它应该是这样的:

<DetailsStructure>
    <DetailsRelation name="X">
        <Type name="A">
            <Template id="123">
                <DetailsRelation>
                    <Type name="B">
                        <Template id="111"/>
                    </Type>
                </DetailsRelation>
            </Template>
            <Template id="1321" />
        </Type>
    </DetailsRelation>
</DetailsStructure>

总结一下:我们应该能够创建简单的结构,然后通过较小的结构描述更大的结构。 当较小的结构发生变化时 - 它会在较大的结构中传播,而较小的结构则使用较小的结构。

这个问题可以解决吗?这很复杂吗?

1 个答案:

答案 0 :(得分:0)

我认为你的XML应该是这样的:

<Devices>
   <Device Type="CPU" Id="cpu001">
      <Componentes>
        . . . 
      </Components> 
   </Device>

   <Device Type="Motherboard" Id="mtb001">
      <Componentes>
         <Id>cpu001</Id>
         . . .  
      </Components> 
   </Device>

   <Device Type="Computer" Id="cpt001">
      <Componentes>
         <Id>mtb001</Id>
         . . . 
      </Components> 
   </Device>

   . . . 

 <Devices>

这样每个设备只出现一次,可以单独修改。使用它的所有其他设备都会反映更改,因为它们不包含它,它们只引用该单个实例。

这是一种关系结构 - 更适合关系数据库而不是XML。

我认为数据库通常是更好的选择 - XML是表示和传输静态数据的好格式,但如果您想对数据进行更改则不适合。