Ошибка JScript / VBScript - PullRequest
2 голосов
/ 27 июня 2009

Я пытаюсь, чтобы скрипт автоматически преобразовывал xml-файл в несколько html-файлов, используя разные таблицы стилей xslt. Однако, что бы я ни пытался, я получаю ошибки. Я пробовал это как в VBscript, так и в JScript, и оба дают мне ошибки. Размер файла xml составляет 537 КБ, а размер файла xsl - 5 КБ.

Вот итерация 1 в JScript. Этот скрипт работает для одной из моих таблиц стилей (таблица стилей, которая создает меньший HTML-файл), но в таблице стилей, которая создает больший HTML-файл, он дает мне «недопустимый вызов процедуры или аргумент» на outstr (как если бы outstr не сделал вернусь неправильно) ошибка:

var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
    WScript.Echo("XSL load error");
    WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
    WScript.Echo ("XML load error " );
    WScript.Quit();
}

var fso = new ActiveXObject("Scripting.FileSystemObject");
var outstr = xml.transformNode(xsl);

var ofl = fso.CreateTextFile("../Commands/commands.html", true, false);
ofl.Write (outstr);
ofl.Close();

Итак, итерация 2 с использованием метода transformNodeToObject. В этом случае я получаю код «Unspecified error» 80004005 в msxml6.dll:

var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
    WScript.Echo("XSL load error");
    WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
    WScript.Echo ("XML load error " );
    WScript.Quit();
}

var result = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.transformNodeToObject(xsl, result);

result.save("../Commands/commands.html");

Моя интуиция говорит, что процессор просто не может справиться с созданием такого большого файла. Это правильно, или я делаю что-то не так. Если это просто проблема с размером, есть ли какая-нибудь другая библиотека / объект, которую я могу использовать в vbscript / jscript, которая выполнит работу?

1 Ответ

3 голосов
/ 27 июня 2009

Несколько килобайт XML не сломают MSXML ни при каких обстоятельствах. Объем памяти вашей машины ограничен, поэтому размер файла не может быть проблемой. Кроме того, выбор основного языка (JScript или VBScript) совершенно не имеет значения, VBScript ничего не может сделать, кроме JScript или наоборот. Вы делаете COM здесь, поэтому язык не может быть проблемой. Можно перестать смотреть в этом направлении.

Это оставляет одну возможность. Вы должны делать что-то не так. ;-) Это может включать проблемы конфигурации или установки MSXML на вашем компьютере, возможно, даже неправильные настройки доступа к файловой системе или учетные данные процесса.

Так как я не могу определить непосредственную проблему в вашем коде, а вы не предоставили никакого XML-кода для тестирования, я могу порекомендовать только несколько вещей, которые могут помочь отладить это. Попробуйте, не обязательно в таком порядке:

  • Убедитесь, что все ваши XML-файлы правильно сформированы и правильно закодированы. Я уверен, что вы уже покончили с этим. Достаточно загрузить их в IE, если это работает, они хороши.
  • Удалите и переустановите MSXML, убедитесь, что у вас также установлена ​​более старая версия (4.0).
  • Загрузите msxsl.exe из Microsoft и выполните преобразования в командной строке, чтобы проверить, работают ли они вообще - этот крошечный инструмент использует MSXML для внутреннего использования и никогда не подводил меня в прошлом.
  • Попробуйте свой код с "MSXML2.DomDocument.4.0", так как в любом случае нет поразительно веской причины использовать 6.0 (я думаю, кроме "чем новее, тем лучше").
  • Только чтобы исключить это как причину, запустите все это как пользователь уровня администратора и на другом компьютере. Посмотрите, если ошибка воспроизводима.
  • Если ничего не помогает, загрузите файлы куда-нибудь, опубликуйте ссылки здесь, и я тоже их посмотрю.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...