【问题标题】:What's the best way to represent a tree with XML?用 XML 表示树的最佳方式是什么?
【发布时间】:2013-04-28 15:01:04
【问题描述】:

我正在实现一些类来处理常见的数据结构(树、二叉树、搜索二叉树、BTree、AVL 等)。我想要一种将树信息存储在数据源中并将其解析为其中一个类的方法。最简单的方法是使用 XML(可移植性很重要)。问题是我制作的 XML 文档不容易阅读。它们不够“直观”。例如,我正在做这样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<tree>
    <root>100</root>
    <node>
        <tree>
            <root>50</root>     
        </tree>
    </node>
    <node>
        <tree>
            <root>200</root>        
        </tree>
    </node>
</tree>

在那里,树会是这样的:

                    100
              50                200

你说什么?您还有其他建议吗?

【问题讨论】:

    标签: xml data-structures tree


    【解决方案1】:

    我在您的描述中没有看到根、树的叶子和其他节点之间的任何重要结构差异。因此它们都可以具有相同的内容模型,如下例所示:

    <tree>
        <value>100</value>
        <tree>
            <value>50</value>
        </tree>
        <tree>
            <value>200</value>
        </tree>
    </tree>
    

    这个结构稍微不那么冗长,并且 XML 文档树与您尝试表示的树相匹配。如果你的值可以表示为字符串,你甚至可以这样写:

    <tree>
        100
        <tree>50</tree>
        <tree>200</tree>
    </tree>
    

    【讨论】:

      【解决方案2】:

      没有用 XML 表示树的“最佳”方式。这完全取决于您要优化存储的目的——您是否希望能够快速追踪特定节点?那么扁平(er)表示可能会更好。如果您想保持描述不冗长,那么您概述的方法将非常好(尽管我可能会将“根”子级转换为属性(根/值),这样 xml 中的每个节点实际上都是树节点)。

      【讨论】:

      • @santiagobasulto,它不必是递归的 - 你的表示是递归的(我唯一要改变的是摆脱“根”节点,只使用“树”节点,即: 会以这种方式代表你的整棵树。但我想说的是还有很多其他合法的数据存储方式,这完全取决于你想用它做什么以及你想优化它。
      【解决方案3】:
      <node value="100">
          <node value="50" />
          <node value="200" />
      </node>
      

      树中的元素是节点,而不是树。整个节点集合构成一棵树。

      此外,XML 本身就是一棵树,因此您不必显式地对其建模。

      【讨论】:

        【解决方案4】:

        在我看来,数据结构在计算机上是很容易的,而不是人类。如果您想要数据的人类可读版本,只需创建一个漂亮的打印visitor

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-14
          • 2021-12-29
          • 1970-01-01
          相关资源
          最近更新 更多