Конфликтующие проблемы пространства имен в XML DOM - PullRequest
0 голосов
/ 21 июля 2010

Я использую документы XML DOM с двумя пространствами имен. Например, рассмотрим следующий документ:

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:libx="http://libx.org/xml/libx2">
  <id>5</id>
  <title>Put Google Book results into Addison</title>
  <updated>2009-02-23T10:12:15Z</updated>
  <author>
    <name>LibX Team</name>
    <uri>http://libx.org</uri>
    <email>libx.org@gmail.com</email>
  </author>
  <libx:libapp>
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="6"/>
    <libx:entry xmlns:libx="http://libx.org/xml/libx2" src="7"/>
  </libx:libapp>
</entry>

У меня есть следующие сомнения относительно пространств имен:

1) Если я не добавлю префикс пространства имен к узлам (id, title, author и т. Д.), Как в приведенном выше примере, им будет присвоено пространство имен по умолчанию: "http://www.w3.org/2005/Atom"? Если нет, какому пространству имен они будут назначены?

2) Метод getNameSpaceURI узла возвращает - URI пространства имен узла или ноль, если он не указан. Но как мне узнать пространство имен узла, если оно не указано? Имеется в виду, есть ли способ узнать, назначено ли пространство имен по умолчанию узлу или назначено какое-то другое пространство имен?

3) Когда я скопирую узлы (с пространствами имен по умолчанию) конкретного документа в другой документ, сохранят ли узлы исходные пространства имен или они займут пространство имен по умолчанию нового документа, в который эти узлы копируются? Если последнее верно, как мне сохранить исходные пространства имен?

Наконец, кто-то может указать мне хороший онлайн-материал для лучшего понимания этих конфликтующих проблем с пространством имен?

Спасибо, Sidhartha

1 Ответ

0 голосов
/ 21 июля 2010

Обучающие программы по пространству имен см. this , this this

Теперь для ваших вопросов:

  1. С xmlns вы объявляете пространство имен по умолчанию -> если вы не префиксируете элемент, пространство имен по умолчаниюискал определение элемента.
  2. Если мое понимание верно, для узла без префикса getNameSpaceURI вернет пространство имен по умолчанию (или ноль, если пространство имен по умолчанию не объявлено).
  3. Решение зависит от того, какие инструменты (XSLT, .net-оболочки и т. Д.) Вы используете для копирования.Если вам нужно выполнить копирование с использованием .net, посмотрите это руководство ( важный узел : для правильного перемещения узла используйте ImportNode ).
...