【发布时间】:2011-01-28 07:32:58
【问题描述】:
我正在做一些测试,但我发现使用或不使用 normalize() 方法时没有区别。
但是 ExampleDepot 网站上的示例使用它。
那么,它有什么用呢? (文档对我来说也不清楚)
【问题讨论】:
标签: java xml normalization
我正在做一些测试,但我发现使用或不使用 normalize() 方法时没有区别。
但是 ExampleDepot 网站上的示例使用它。
那么,它有什么用呢? (文档对我来说也不清楚)
【问题讨论】:
标签: java xml normalization
您可以以编程方式构建具有与实际 XML 结构不对应的无关结构的 DOM 树 - 特别是诸如多个文本类型的节点彼此相邻,或文本类型的空节点。 normalize() 方法将这些删除,即合并相邻的文本节点并删除空节点。
当您有其他代码希望 DOM 树总是看起来像从实际 XML 文档构建的东西时,这会很有用。
这基本上意味着下面的 XML 元素
<foo>hello
wor
ld</foo>
在非规范化节点中可以这样表示:
Element foo
Text node: ""
Text node: "Hello "
Text node: "wor"
Text node: "ld"
当归一化时,节点将如下所示
Element foo
Text node: "Hello world"
【讨论】:
它从相邻的 Text 节点和空的 Text 节点中清除代码
【讨论】:
有很多可能的 DOM 树对应同一个 XML 结构,每个 XML 结构至少有一个对应的 DOM 树。所以从 DOM 到 XML 的转换是surjective。 所以可能会发生这样的情况:
dom_tree_1 != dom_tree_2
# but:
dom_tree_1.save_DOM_as_XML() == dom_tree_2.save_DOM_as_XML()
而且没有办法确保:
dom_tree == dom_tree.save_DOM_as_XML().load_DOM_from_XML()
但我们想拥有它bijective。这意味着每个 XML 结构都对应一个特定的 DOM 树。
因此,您可以定义所有可能的 DOM 树的子集,该子集对所有可能的 XML 结构集是双射的。
# still:
dom_tree.save_DOM_as_XML() == dom_tree.normalized().save_DOM_as_XML()
# but with:
dom_tree_n = dom_tree.normalize()
# we now even have:
dom_tree_n == dom_tree_n.save_DOM_as_XML().load_DOM_from_XML().normalize()
所以规范化的 DOM 树可以从它们的 XML 表示中完美地重建。没有信息丢失。
【讨论】:
规范化 XML 文档的根元素。这样可以保证根节点下的所有Text节点都放入一个“正常”的形式,也就是说文档中既没有相邻的Text节点,也没有空的Text节点。
【讨论】: