我正在做一些测试,但当我使用或不使用normalize()方法时,我看不出有什么不同。但ExampleDepot网站上的示例使用了它。那么,它是用来做什么的?(文档对我来说也不清楚)
发布于 2010-03-17 04:48:06
您可以通过编程方式构建一个DOM树,该树具有与实际XML结构不对应的外部结构-具体地说,就是像text类型的多个节点相邻或text类型的空节点这样的内容。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"发布于 2010-03-17 05:07:40
它清除相邻文本节点和空文本节点中的代码
发布于 2015-09-11 15:39:00
有许多可能的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表示中完美地重构。没有信息丢失。
https://stackoverflow.com/questions/2457955
复制相似问题