XML性能:元素 vs 属性

3

我有一个关于XML设计的基本问题。我有一个用于生成UI的XML,其格式类似于下面:

<Input>
  <Label>Enter Machine Name</Label>
  <ToolTip> Please enter the correct machine name</ToolTip>
  <Type>TextField</Type>
</Input>

我的问题是,将XML以上述格式编写还是下述格式编写对于更好的处理时间结果更好。

<Input Label="Enter Machine Name" 
       ToolTip="Please enter machine name"
       Type="TextField">

哪种类型的XML可以更快地解析?
2个回答

5

虽然属性会占用更少的空间,这对性能来说是一个优势,而基于SAX解析的属性设计将生成更少的事件,这可以节省一点时间,但在绝大多数情况下,任何属性与元素之间的性能差异都不会有影响。

和大多数先验性能担忧一样,最好的方法是构建、测量和调整,前提是你的基本设计是合理的。你的基本设计的合理性不会受到元素与属性的影响。

你应该尝试使用行业标准模式的XML,并遵循它们在元素和属性方面的做法。如果你自己从头开始设计,请参考XML Element vs XML Attribute以及那里的其他兄弟回答。


我非常好奇你所说的“基于属性的设计会生成更少的SAX解析事件”的陈述。你能帮我理解这是怎么回事吗? - Dmytro
@Dmitry:实现可能会有所不同,但SAX通常会为每个属性生成0或1个事件,并为每个元素生成2个事件。(可以从开始元素事件或通过单独的事件检索属性;元素通常具有开始和结束事件。)但我真的想强调的是这个答案中这样的差异几乎从来不重要(而且无论如何都依赖于实现)。在选择元素和属性之间有更重要的设计考虑,并且还有许多其他性能领域将淹没属性和元素之间的任何差异。 - kjhughes
因此,SAX解析器会在一个事件(startElement)中记录属性名称和属性值,并且这个事件是发送的第一个相关事件,自关闭避免了检查结束标记;而要获取其innerHTML表示值和标记名称表示键的元素,则需要完成属性解析,然后找到子元素的startElement以查找键,然后才能获取值,并在此之后(内部)浪费时间处理无用的endElement事件,然后再处理另一个事件。 - Dmytro

-3

-1 (1) "你应该做X,因为<插入与解释为什么应该做X无关的填充文本>。" (2) "我期望X",相信X并不意味着X会按照你想要的方式行事,除非你有理由相信某些事情,否则不要试图说它是那样工作的。我们知道XML可以很好地处理属性和节点,问题想知道的是XML是否有一般偏好来解析节点或属性。如果我不在乎使用哪一个,XML解析器更喜欢我使用哪一个? - Dmytro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接