Что делает метод нормализации Java Node? - PullRequest
20 голосов
/ 16 марта 2010

Я делаю некоторые тесты, но не вижу разницы, когда я использую или нет метод normalize(). Но примеры на сайте ExampleDepot используют его. Итак, для чего это нужно? (Документация для меня тоже не ясна)

Ответы [ 4 ]

26 голосов
/ 16 марта 2010

Вы можете программно построить дерево 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 голосов
/ 17 марта 2010

Он очищает код от смежных текстовых узлов и пустых текстовых узлов

2 голосов
/ 11 сентября 2015

существует множество возможных деревьев DOM, которые соответствуют одной и той же структуре XML, и каждая структура 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 голосов
/ 17 апреля 2012

Нормализовать корневой элемент документа XML. Это гарантирует, что все текстовые узлы под корневым узлом будут переведены в «нормальную» форму, что означает, что в документе нет ни смежных текстовых узлов, ни пустых текстовых узлов.

...