Поделиться через


Управление пространствами имен в XML-документе

Пространства имен XML связывают имена элементов и атрибутов в XML-документе с пользовательскими и предопределенными URI. Чтобы создать эти связи, необходимо определить префиксы для URI пространства имен и использовать эти префиксы для определения имен элементов и атрибутов в XML-данных. Пространства имен препятствуют конфликтам имен элементов и атрибутов, а также позволяют обрабатывать и проверять элементы и атрибуты одного и того же имени по-разному.

Объявление пространств имен

Чтобы объявить пространство имен в элементе, используйте xmlns: атрибут:

xmlns:<name>=<"uri">

где <name> префикс пространства имен и <"uri"> является универсальным кодом ресурса (URI), определяющим пространство имен. После объявления префикса его можно использовать для квалификации элементов и атрибутов в XML-документе и связать их с URI пространства имен. Так как префикс пространства имен используется во всем документе, он должен быть коротким.

В этом примере определяются два BOOK элемента. Первый элемент квалифицируется префиксом mybook, а второй — префиксом bb. Каждый префикс связан с URI другого пространства имен:

<mybook:BOOK xmlns:mybook="http://www.contoso.com/books.dtd">  
    <bb:BOOK xmlns:bb="urn:blueyonderairlines" />
</mybook:BOOK>

Чтобы указать, что элемент является частью определенного пространства имен, добавьте в него префикс пространства имен. Например, если Author элемент принадлежит пространству mybook имен, он объявляется как <mybook:Author>.

Область действия объявления

Пространство имен действует с момента своего объявления до конца элемента, в котором оно объявлено. В этом примере пространство имен, определенное в BOOK элементе, не применяется к элементам за пределами BOOK элемента, например к элементу Publisher :

<Author>Joe Smith</Author>  
<BOOK xmlns:book="http://www.contoso.com">  
    <title>My Wonderful Day</title>  
      <price>$3.95</price>  
</BOOK>  
<Publisher>  
    <Name>MSPress</Name>  
</Publisher>  

Пространство имен должно быть объявлено до его использования, но оно не должно отображаться в верхней части XML-документа.

При использовании нескольких пространств имен в XML-документе можно определить одно пространство имен в качестве пространства имен по умолчанию для создания более чистого документа. Пространство имен по умолчанию объявляется в корневом элементе и применяется ко всем неквалифицированным элементам документа. Пространства имен по умолчанию применяются только к элементам, а не к атрибутам.

Чтобы использовать пространство имен по умолчанию, опустите префикс и двоеточие из объявления элемента:

<BOOK xmlns="http://www.contoso.com/books.dtd">  
...
</BOOK>

Управление пространствами имен

Класс XmlNamespaceManager хранит коллекцию URI пространства имен и их префиксов, а также позволяет искать, добавлять и удалять пространства имен из этой коллекции. В определенных контекстах этот класс необходим для повышения производительности обработки XML. Например, класс XsltContext используется для поддержки XPath с помощью XmlNamespaceManager.

Диспетчер пространств имен не выполняет проверку в пространствах имен, но предполагает, что префиксы и пространства имен уже проверены и соответствуют спецификации пространств имен W3C .

Замечание

LINQ TO XML в C# и Visual Basic не используют XmlNamespaceManager, чтобы управлять пространствами имен. См. работу с пространствами имен XML (C#) и работу с пространствами имен XML (Visual Basic) в документации по LINQ для получения сведений об управлении пространствами имен при использовании LINQ to XML.

Ниже приведены некоторые задачи управления и поиска, которые можно выполнить с XmlNamespaceManager помощью класса. Дополнительные сведения и примеры см. по ссылкам на эталонную страницу для каждого метода или свойства.

Кому Использование
Добавление пространства имен AddNamespaceМетод
Удалить пространство имен RemoveNamespaceМетод
Найдите URI для пространства имен по умолчанию Свойство DefaultNamespace
Найти URI для префикса пространства имен LookupNamespaceМетод
Найдите префикс для URI пространства имен LookupPrefixМетод
Получите список пространств имен в текущем узле GetNamespacesInScopeМетод
Определение области пространства имен методы PushScope и PopScope
Проверьте, определен ли префикс в текущей области HasNamespaceМетод
Получение таблицы имен, используемой для поиска префиксов и URI Свойство NameTable

См. также