【发布时间】:2012-02-24 12:14:26
【问题描述】:
在下面的 xml 中查找某个“资源”时,以下结构中的一个或另一个更快吗?
示例 1。
<root>
<resource key="res_test_1" value="test"/>
<resource key="res_test_2" value="test 2"/>
<resource key="res_test_3" value="test 3"/>
</root>
示例 2。
<root>
<res_test_1>test</res_test_1>
<res_test_2>test 2</res_test_2>
<res_test_3>test 3</res_test_3>
</root>
“键”始终是有效的 XML 元素名称。
我问的是因为这组资源键/值将是 xml 文件的一部分,将由 XSL 处理,用同一 XML 文件的资源部分中的值替换 XML 中的某些“键” ...而且我想为所需的查找尽可能优化资源部分的结构。 我正在使用 C# 和 XslCompiledTransform 对象来运行转换。
我的直觉告诉我,当它们是实际的元素名称时,对象模型可能会更快地获取键,但我没有找到关于此类问题的建议。也许考虑这个问题并不重要,因为整个 xml 文档在转换过程中都会在内存中。
编辑(从这里往下添加更多信息): 正如我已经指出的那样,这个问题可能是理论上的(专注于几毫秒是不相关的),但输入这个问题的原因是为了获得对我所问的确切内容的意见 - 一种方式比另一种方式更快(在列出的两个示例中),当涉及到在 XML 结构中定位数据时。无论出于何种原因,一种或另一种是首选方式。
在我看来,第一个示例需要为处理器提供更多“工作”,以便在请求时定位和返回值。
这是示例 1 的示例 XPath: /root/resource[@key="res_test_2"]/@value
示例 2 的对应 XPath: /root/res_test_2
此外,示例 2 的结构需要更少的空间,这将缩短加载时间,如下面的答案之一所示。一个很好的观点,至少对于非常大的文档而言。
当我想到它时:示例 2 的一个明显缺点是 XSD 模式没有多大用处,因为这部分 XML 将具有动态元素名称.. 这可能是建议将所有值放在属性中(下面的答案)是关于。
我制作了这些 XPath 示例,因为它们易于演示。在我之前写的 XSL 转换中将需要类似的查找,但这个问题的重点应该是文档的结构,作为一个更通用的问题。
谢谢, 安德烈亚斯
【问题讨论】:
-
查找速度更多地取决于用于查找的算法——两种提供的数据结构之间的差异很小,并且使用相同的算法不会导致显着的性能差异。请编辑问题并描述完整的问题:源 XML 文档、想要的结果和转换规则。那么我很高兴向您展示一个有效的转换。
标签: xml xslt data-structures