【问题标题】:What does Java Node normalize method do?Java Node normalize 方法有什么作用?
【发布时间】:2011-01-28 07:32:58
【问题描述】:

我正在做一些测试,但我发现使用或不使用 normalize() 方法时没有区别。 但是 ExampleDepot 网站上的示例使用它。 那么,它有什么用呢? (文档对我来说也不清楚)

【问题讨论】:

    标签: java xml normalization


    【解决方案1】:

    您可以以编程方式构建具有与实际 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"
    

    【讨论】:

      【解决方案2】:

      它从相邻的 Text 节点和空的 Text 节点中清除代码

      【讨论】:

        【解决方案3】:

        有很多可能的 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 表示中完美地重建。没有信息丢失。

        【讨论】:

          【解决方案4】:

          规范化 XML 文档的根元素。这样可以保证根节点下的所有Text节点都放入一个“正常”的形式,也就是说文档中既没有相邻的Text节点,也没有空的Text节点。

          【讨论】:

            猜你喜欢
            • 2021-11-01
            • 1970-01-01
            • 2020-12-19
            • 2014-07-28
            • 2013-09-02
            • 2012-11-01
            • 1970-01-01
            • 2010-12-20
            • 1970-01-01
            相关资源
            最近更新 更多