如何设计在xml中存储复杂对象设置

Joa*_*nge 0 xml

我试图在对象本身上存储每个对象状态的自定义设置,但我不知道如何以面向对象的方式执行此操作.所以:

xml文件中的一个部分是:

<ObjectType>
Run Code Online (Sandbox Code Playgroud)

可以是Blur, Sharpen, Smooth,等等

但是说,Blur只有在类型为的情况下才能存储其他属性Blur,例如:

<BlurType>Gaussian, Smart, etc</BlurType>
Run Code Online (Sandbox Code Playgroud)

此外,我不确定是否应将这些存储为:

<a>something</a>
Run Code Online (Sandbox Code Playgroud)

要么

<a>Type=something</a>
Run Code Online (Sandbox Code Playgroud)

Wel*_*bog 5

永远不要在XML中存储分隔数据.


也就是说,永远不要有一个包含逗号分隔值列表或等号分隔值的元素,或类似的东西.XML为您提供了创建列表的机制,如果您计划使用它,则不应重新发明.

存储像你正在谈论的列表的"XML方式"是这样的:

<BlurType>
  <option>Gaussian</option>
  <option>Smart</option>
  ...
</BlurType>
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一组可以打开或关闭的特定值,

<BlurType>
  <Gaussian>true</Gaussian>
  <Smart>true</Smart>
  ...
</BlurType>
Run Code Online (Sandbox Code Playgroud)

第二种方法可以比第一种方法更严格地验证XSD.首先是更灵活.您不希望像type=somethingXML 一样存储任何内容.两者之间的中间地带将如下工作:

<BlurType>
  <option name="Gaussian">true</option>
  <option name="Smart">true</option>
  ...
</BlurType>
Run Code Online (Sandbox Code Playgroud)

这提供了灵活性,同时您可以根据XSDDTD验证name属性和option元素的值.

  • @Joan Venge:XSD和DTD是验证XML的标准方法.我将从问题中添加链接.我会说第三种方法(中间地带)是更通用的方法.所有方法都适用于非布尔值.例如,你可以使用`<GaussianRadius> 5 </ GaussianRadius>`这是一个整数.我不知道你对存储模糊滤镜本身的意思.`<BlurType> ... </ BlurType>`的哪一部分不足? (2认同)