Коллеги, ХЭЛП!
В программе на 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...
Здравствуйте, 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) Ну а дальше всё как обычно...
Удачи!
Здравствуйте, Slava_L, Вы посоветовали "in.xml" pfuhepbnm как текстовый файл, удалить из текста ссылку на xsd и загрузить в xmlDoc уже этот текст.
В принципе, cправедливо (ибо ссылку на схему из объекта XMLDOMDocument никак не удалить — она ReadOnly).
Благодарю за подсказку!
Ей-богу, воспользуюсь предложенным извратом, если подскажете мне, как создать на web-странице ActiveXObject("Scripting.FileSystemObject"); так, чтобы не выдавалось сообщение "Страница может содержать опасные программы (элементы ActiveX). Разрешить их выполнение?" — уже в обозревателе (IE6) разрешил всё, что можно было, безопасность сделал — ниже некуда — болт!..
Здравствуйте, 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);
Ещё раз спасибо!
Здравствуйте, isek, Вы писали:
I>I>var strInputXml = new String(inputXmlDoc.xml);
I>
Круто! До этого я сразу не догадался (чтобы из загруженного документа вытащить текст XML). Просто у меня в своё время была подобная проблема, но там я работал с консольной утилитой и совсем не задумывался об исполнении этого кода на Web странице...