XML Schema и XSL...
От: iseYogik Украина  
Дата: 21.07.04 12:52
Оценка:
Коллеги, ХЭЛП!

В программе на JavaScript файл "in.xml" загружается С ПРОВЕРКОЙ НА ВАЛИДНОСТЬ, а затем преобразовыватся в другой xml с помощью xsl.
Проверка на валидность проходит правильно — проверено (то есть ссылки работают).
НО. Если в качестве схемы входного документа используется DTD — всё ОК. А если XML Schema — преобразование не проходит (outXmlDoc пустой)...

// Преобразовать inputXmlDoc к рабочему xml-документу по правилам xslDoc
inputXmlDoc.load("in.xml");
xslDoc.load("in.xsl");
inputXmlDoc.transformNodeToObject(xslDoc, outXmlDoc); // вот это не отрабатывает при использовании XML Schema, а не DTD...
Re: XML Schema и XSL...
От: Slava_L Россия  
Дата: 21.07.04 18:50
Оценка: 2 (1)
Здравствуйте, iseYogik, Вы писали:

Y>Коллеги, ХЭЛП!


Y>В программе на JavaScript файл "in.xml" загружается С ПРОВЕРКОЙ НА ВАЛИДНОСТЬ, а затем преобразовыватся в другой xml с помощью xsl.

Y>Проверка на валидность проходит правильно — проверено (то есть ссылки работают).
Y>НО. Если в качестве схемы входного документа используется DTD — всё ОК. А если XML Schema — преобразование не проходит (outXmlDoc пустой)...

Y>
Y>// Преобразовать inputXmlDoc к рабочему xml-документу по правилам xslDoc
Y>inputXmlDoc.load("in.xml");
Y>xslDoc.load("in.xsl");
Y>inputXmlDoc.transformNodeToObject(xslDoc, outXmlDoc); // вот это не отрабатывает при использовании XML Schema, а не DTD...
Y>


А что если поступать так:
1) Загружаем in.xml как текстовый файл:
    objFSO = new ActiveXObject("Scripting.FileSystemObject");
    var ts = objFSO.OpenTextFile("in.xml", 1);
    var text_data = ts.ReadAll();

2) Удаляем ссылку на XSD:
например с помощью регуларных выражений удаляем из этого текста строку xsi:noNamespaceSchemaLocation="имя_схемы.xsd"
(ну или как там делается ссылка на XSD)
3) Загружаем этот текст как XML:
    inputXmlDoc.loadXML(text_data);

4) Ну а дальше всё как обычно...

Удачи!
Re[2]: XML Schema и XSL...
От: isek Украина  
Дата: 22.07.04 05:14
Оценка:
Здравствуйте, Slava_L, Вы посоветовали "in.xml" pfuhepbnm как текстовый файл, удалить из текста ссылку на xsd и загрузить в xmlDoc уже этот текст.
В принципе, cправедливо (ибо ссылку на схему из объекта XMLDOMDocument никак не удалить — она ReadOnly).
Благодарю за подсказку!
Ей-богу, воспользуюсь предложенным извратом, если подскажете мне, как создать на web-странице ActiveXObject("Scripting.FileSystemObject"); так, чтобы не выдавалось сообщение "Страница может содержать опасные программы (элементы ActiveX). Разрешить их выполнение?" — уже в обозревателе (IE6) разрешил всё, что можно было, безопасность сделал — ниже некуда — болт!..
Re[2]: XML Schema и XSL...
От: isek Украина  
Дата: 22.07.04 06:27
Оценка: 2 (1)
Здравствуйте, Slava_L!

УРА, вдогонку прошлому ответу (извините за настырность — просто не люблю прерывать разговор на середине)!

Я нашёл гибридный способ (без FileSystemObject):

// Преобразовать inputXmlDoc к рабочему xml-документу по правилам xslDoc
inputXmlDoc.load("in.xml");
xslDoc.load("in.xsl");

// Валидация прошла - удалить ccылку на схему
// ( эта ссылка почему-то мешала преобразовать документ с помощью xsl, ссылка на DTD, кстати, - не мешала! :-? ).
// А ИЗВРАТНОЕ такое удаление ссылки (через строку) - потому что в объекте inputXmlDoc она ReadOnly...
var strInputXml =  new String(inputXmlDoc.xml);
inputXmlDoc.loadXML( strInputXml.replace('xmlns="x-schema:foto_schema.xml"', '') );

inputXmlDoc.transformNodeToObject(xslDoc, outXmlDoc);


Ещё раз спасибо!
Re[3]: XML Schema и XSL...
От: Slava_L Россия  
Дата: 23.07.04 11:20
Оценка:
Здравствуйте, isek, Вы писали:
I>
I>var strInputXml =  new String(inputXmlDoc.xml);
I>


Круто! До этого я сразу не догадался (чтобы из загруженного документа вытащить текст XML). Просто у меня в своё время была подобная проблема, но там я работал с консольной утилитой и совсем не задумывался об исполнении этого кода на Web странице...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.