2016-07-05 65 views
3

在写2D点的XML数组我得到以下输出:以XML格式书写2D点

<Vertices count="42"> 
    <V> 
    <X>110</X> 
    <Y>0</Y> 
    </V> 
    <V> 
    <X>109.5105</X> 
    <Y>3.0901</Y> 
    </V> 
    <V> 
    <X>108.0901</X> 
    <Y>5.8778</Y> 
    </V> 
    ... 

内部,我们对什么是最好的布局/标签命名为写他们讨论。以下是其他几个选项:

<Vertices> 
    <Point>110, 0</Point> 
    <Point>109.5105, 3.0901</Point> 
    <Point>108.0901, 5.8778</Point> 
    ... 

<Vertices> 
    <item>110, 0</item> 
    <item>109.5105, 3.0901</item> 
    <item>108.0901, 5.8778</item> 
    ... 

假设你需要解析这个XML文件:

  • 什么布局将你最喜欢?
  • 根据XML规范哪种布局更正确?

谢谢。

回答

1

这是非常基于观点的,所以这里是我的:

我会去的第一种方法有以下几个原因:

  1. 这种数据格式很可能仅在内部使用的,所以它不”不管它是否美观,只要它是机器可读的。
  2. 它很容易扩展。想要一个Z坐标?那么,添加另一个元素。这是可能的而不破坏现有功能!这意味着需要Z坐标的应用程序版本仍然可以读取不包含它的XML文件,并假定Z为0.您的应用程序无法处理Z坐标的版本将忽略它。
  3. 它很容易验证。您可以假定每个坐标都包含一个浮点值,可以使用标准方法(如XSD)进行验证。其他格式需要更多关于每个元素内容的知识,这些内容可能不包含在标准工具中。

在格式化另一个选择可能是这样的:

<vertices> 
    <vertex x="0.123" y="1.443" /> 
    <vertex x="1.321" y="0.334" /> 
</vertices> 

的优势同样的列表为真为这种格式,只知道它是更容易阅读的人。


编辑:我忘了,解析它与您的第一项建议(和我上面给了一个),比​​你建议的其他两种格式,这需要另一个字符串分割/剪裁操作每个点要容易得多。

+0

那么'count = 42'属性呢?我们可以包括它吗? – abenci

+0

它只是导致问题。想象一下,有人在不更新属性的情况下手动删除节点。此外,该属性的重点是什么?在分析XML文件之后甚至在分析XML文件时,您都可以轻松计算顶点的数量。使用'XmlDocument'这是一件不容易的事情。 –

+0

请注意,XML规范不会对节点的读取顺序做任何声明!我所知道的大多数XML解析器将按照它们在XML文件中的顺序返回节点,但这不是给定的,所以如果顶点的顺序是相关的,则需要在解析XML文件后可以排序的另一个属性。 –