Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> интерфейс IMXNamespaceManager, Как он работает, и как с ним работать 
V
    Опции темы
nuzzle
Дата 14.4.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.6.2008

Репутация: нет
Всего: нет



Здравствуйте!

Передо мной стоит задача обработать содержимое тегов, добавленных в документ Word 2003, сохраненный в формате xml. Имена тегов имеют префикс "ns0:" пространства имен присоединенной мною схемы. Изучив примеры кода для платформы .NET, я нашел, что пространства имен добавляются с помощью объекта XmlNamespaceManager. А как действовать при использовании XML DOM? Поискав в MSDN, я нашел интерфейс IMXNamespaceManager, который, судя по описанию, выполняет те же функции, что и XmlNamespaceManager, но его использование в C++ и связь с интерфейсом документа мне пока не ясна. 

Объясните, пожалуйста, как добавить пространства имен для экземпляра XMLDocument40.
PM MAIL   Вверх
nuzzle
Дата 16.4.2009, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.6.2008

Репутация: нет
Всего: нет



Оказалось, я двигался в неверном направлении. Чтобы задать пространства имен для экземпляра документа XML, нужно воспользоваться расширенным интерфейсом IXMLDOMDocument2. С его помощью можно задать свойство второго уровня SelectionNamespaces, которое и является определением пространств имен для документа. Свойство задается методом setProperty:
Код

HRESULT setProperty (BSTR name, VARIANT value);
 
Например,
Код


    ... 

    ::CoInitialize(NULL);

    HRESULT hr;
    // смарт-указатели на интерфейсы DOM
    MSXML2::IXMLDOMDocument2Ptr pXMLWordDoc;
    MSXML2::IXMLDOMNodePtr pXMLNode;

    _variant_t customNamespace(_T("xmlns:ns0='http://serviceorder-schema.com' \
                            xmlns:w='http://schemas.microsoft.com/office/word/2003/wordml'"));
    try
    {
        hr = pXMLWordDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
        if (FAILED(hr)) throw hr;

        pXMLWordDoc->load(_T("D:\\MyTemplate.xml"));

        pXMLWordDoc->setProperty(_T("SelectionNamespaces"), customNamespace);

        /* теперь можно искать в документе теги
        с префиксами заданных пространств имен,
        например, пользовательского xmlns:ns0 */
        pXMLNode = pXMLWordDoc->selectSingleNode(_T("//ns0:ClientAddress"));

        // вывод содержимого тега
        printf((LPCSTR)pTable->xml);
    }
    catch (...)
    {
         printf("Error!");
    }

    pXMLWordDoc.Release();
    pXMLNode.Release();

    ::CoUninitialize();

    ...




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.