XML DOM, конфликтующие с пространством имен

Я использую документы 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>[email protected]</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) Если я не добавлю префикс пространства имен к узлам (идентификатор, заголовок, автор и т. д.), как в приведенном выше примере, им будет назначено пространство имен по умолчанию: «http://www.w3.org/2005/Atom" ? Если нет, то к какому пространству имен они будут привязаны?

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

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

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

Спасибо, Сидхартха


person Siddhartha Gutha    schedule 21.07.2010    source источник


Ответы (1)


Руководства по пространствам имен см. в этом, это. и это

Теперь по вашим вопросам:

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