使用java解析DOM中的规范化 - 它是如何工作的?

2022-08-31 05:37:48

本教程中,我在 DOM 解析器的代码中看到了下面的一行。

doc.getDocumentElement().normalize();

我们为什么要做这种规范化?
我阅读了文档,但我一个字也听不懂。

将所有文本节点置于此节点下方子树的完整深度

好吧,那么有人可以向我展示(最好是用图片)这棵树是什么样子的吗?

谁能解释一下为什么需要规范化?
如果我们不规范化会发生什么?


答案 1

句子的其余部分是:

其中,只有结构(例如,元素、注释、处理指令、CDATA 节和实体引用)分隔文本节点,即既没有相邻的文本节点,也没有空的文本节点。

这基本上意味着以下 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"

属性也是如此:、注释等。<foo bar="Hello world"/>


答案 2

简单来说,规范化是减少冗余。
冗余示例:
a) 根/文档标记外的空格(...<文档></文档>...
b) 开始标记内的空格(<...>)和结束标记(</...>)
c) 属性及其值之间的空格(即键名=“
之间的空格 d) 多余的命名空间声明
e) 属性和标记
文本中的换行符/空格 f) 注释等...