是否应该删除空白XML元素?

是否应该删除空白XML元素?,xml,Xml,在XML世界中,在文件中保留空白元素是否更好: <widgets> <widget> <id>5</id> <name>Bob</name> <price>5.33</price> <otherInfo>Bob is a ball.</otherInfo> <dateAdded>

在XML世界中,在文件中保留空白元素是否更好:

<widgets>
    <widget>
        <id>5</id>
        <name>Bob</name>
        <price>5.33</price>
        <otherInfo>Bob is a ball.</otherInfo>
        <dateAdded>9-5-2010</dateAdded>
    </widget>
    <widget>
        <id>3</id>
        <name>Mary</name>
        <price>4.67</price>
        <otherInfo></otherInfo>
        <dateAdded>10-1-2010</dateAdded>
    </widget>
</widgets>

5.
上下快速移动
5.33
鲍勃是个球。
9-5-2010
3.
玛丽
4.67
10-1-2010
或删除它们:

<widgets>
    <widget>
        <id>5</id>
        <name>Bob</name>
        <price>5.33</price>
        <otherInfo>Bob is a ball.</otherInfo>
        <dateAdded>9-5-2010</dateAdded>
    </widget>
    <widget>
        <id>3</id>
        <name>Mary</name>
        <price>4.67</price>
        <dateAdded>10-1-2010</dateAdded>
    </widget>
</widgets>

5.
上下快速移动
5.33
鲍勃是个球。
9-5-2010
3.
玛丽
4.67
10-1-2010
对于解析来说,如果它们在那里就更容易了,因为在尝试获取元素之前不需要检查元素是否存在。另一方面,XML文件中不会出现空白元素


最佳实践是否规定了一种存储形式与另一种存储形式,还是取决于存储的数据?

我认为这方面没有标准

如果您正在进行解析以及创建XML文件,我会选择对您来说更简单的方法。更改代码或维护一个或多或少易于理解的文件

如果其他人将创建XML文件,那么我会说,对于列表,一些字段需要空白,而对于许多字段,允许删除一些字段


但是请记住,如果字段不存在,除非他们阅读文档,否则没有人会认为它不存在。这取决于存储的数据

对于某些元素来说,元素的存在会产生巨大的差异——一个简单的例子是HTML中的


。对于其他数据格式,这没有区别


通常,您应该知道正在处理的是哪种数据,理解数据格式的一部分是理解空元素是否重要。

这取决于应用程序。 一个空白标签确实有它的意义,如果它不在那里,它就不一样了。 取决于应用程序设计,它是否需要保留

我见过很多应用程序,其中空白和/或自动关闭标记(
)在应用程序中有意义,如果没有它们,应用程序就会停止工作

举个例子: 在magento中,某些缓存后端需要缓存前缀。如果它是空的,它就是一个空前缀,但是如果它不在那里,它就不能工作。这将是一个例子,你不能“空白”标签

我使用的另一个应用程序是机顶盒视频点播提供商的目录API


有一个节点刚好
,表示物品已经购买并可以提供服务。我个人不喜欢这个设计,因为它模棱两可。我会把它设计成
true
或者
就是不真实。空白标记和自动关闭标记确实意味着,根据应用程序设计需要保留与否,您在这里做一些假设,取决于您正在做什么,比如序列化和对象到XML,然后返回(同样,取决于平台),它是否存在可能无关紧要。这实际上取决于您在这里使用XML做什么。不,您是在做假设。在“xml世界”中,它很重要。如果这对你的申请没有影响,那就是你的事情。我只是举了一个具体的例子,说明它的重要性。因此,这意味着它在一般情况下很重要。不重要的是你是使用
还是
;在XML中,它们是完全相同的。唉,有些人坚持使用正则表达式解析XML,这是他们扼杀的事情之一……这是真的,这就是为什么我总是提到这两个版本的“空白和/或自动关闭标记”。。。“它们确实包含一个值”,但感谢您在mor+1中指出它。在本例中,元素为空/不在其中都表示该条目中该元素的信息不存在。我自己编写文档的格式和解析器,因此我完全可以控制如何处理存在/不存在的特定元素