Java Node的normalize方法是做什么用的?

23

我正在进行一些测试,但是当我使用或不使用 normalize() 方法时,似乎没有任何区别。 但是 ExampleDepot 网站上的示例使用了它。 那么,它有什么作用呢?(对我来说,文件中的说明并不清楚)

4个回答

28
你可以编写程序来构建一个DOM树,它具有不对应实际XML结构的多余结构 - 特别是相邻的多个文本节点或空文本节点。 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"

4

它可以清理相邻的文本节点和空文本节点中的代码。


2
有很多可能对应于相同 XML 结构的 DOM 树,而每个 XML 结构至少有一个对应的 DOM 树。因此,从 DOM 转换到 XML 是满射的。因此,可能会发生以下情况:
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表示完美地重建。没有信息丢失。

0

规范化XML文档的根元素。这可以确保根节点下的所有文本节点都被放置在“正常”形式中,这意味着文档中既没有相邻的文本节点,也没有空的文本节点。


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