powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как валидировать XML, у которого нет в заголовке ссылки на namespace
10 сообщений из 10, страница 1 из 1
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #33549387
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть XML файл, но у него в заголовке нет указания, ни на пространство имен, ни на схему по которой он создан. Есть XSD схема, в ней установлено пространство имен. Как проверить соответствие документа этой схеме?
Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var sOutput = validateFile("e.xml");
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var FLog = FSO.OpenTextFile("result.txt", 8 ,true);
FLog.WriteLine(sOutput);
FLog.Close();

function validateFile(strFile)
{
    var xs = new ActiveXObject("MSXML2.XMLSchemaCache.4.0");
    xs.add("http://www.editeur.org/onix/2.1/reference", "ONIX_BookProduct_Release2.1_reference.xsd");

    var xd = new ActiveXObject("MSXML2.DOMDocument.4.0");
    xd.schemas = xs;
    xd.async = false;
    xd.validateOnParse = true;
    xd.resolveExternals = true;
    xd.load(strFile);
    if (xd.parseError.errorCode !=  0 )
    {
         return("Validation failed on " + strFile + 
                "\n=====================" +
                "\nReason: " + xd.parseError.reason + 
                "\nSource: " + xd.parseError.srcText + 
                "\nLine: " + xd.parseError.line + "\n");
    }
    else 
         return("Validation succeeded for " + strFile + 
                "\n======================\n" +"\n");
}
В таком виде верификация работает, но не полностью, проверка на схему не работает, т.к. в файле нет ссылки на пространство имен. Если в файл добавить такой текст:
Код: plaintext
1.
2.
<?xml version="1.0" encoding="UTF-8"?>
<ONIXMessage xmlns="http://www.editeur.org/onix/2.1/reference" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.editeur.org/onix/2.1/reference
http://www.editeur.org/onix/2.1/reference/ONIX_BookProduct_Release2.1_reference.xsd">
, то проверка на схему идет и ошибки выдаются. Как надо написать скрипт, чтоб верификация шла, даже если в файле-документе не указано пространство имен?
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #33559300
Ay-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно загружен файл в XMLSchemaCache
Код: plaintext
xs.add("",http://www.editeur.org/onix/ 2 . 1 /reference");
надо вот так.

Ваша связка не работает потому что в XMLSchemaCache нет нужной схемы
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34142424
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ay-yНеправильно загружен файл в XMLSchemaCache
Код: plaintext
xs.add("",http://www.editeur.org/onix/ 2 . 1 /reference");
надо вот так.

Ваша связка не работает потому что в XMLSchemaCache нет нужной схемы
Обьясните пожалуста по-подробнее, что нужно задать в первом параметре и что во втором. Вы говорите, что в XMLSchemaCache нет нужной схемы, ну так http://www.editeur.org/onix/2.1/reference вроде пространство имен, а не схема. Как схему-то подключить правильно?
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34142523
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю так
Код: plaintext
1.
2.
3.
4.
5.
...
    Doc.loadXML('<?xml version="1.0" encoding="windows-1251"?><K_2_180_06_001_000/>');
    xs := CoXMLSchemaCache50.Create;
    xs.add('http://www.w3.org/2001/XMLSchema-instance','Файлы обмена\NP_NO_2_180_06_001_000.xsd');
    Doc.schemas := xs;
...
Ошибок не выдает, все работает, но в xml файл в корневой элемент <K_2_180_06_001_000/> ничего не добавляется, ни пространство имен ни схема. Можете подсказать, как сделать правильно?
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34143897
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты определись, что тебе нужно - создать документ или валидировать его?
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34145410
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И то и то, одно другого не исключает надеюсь:) Т.е. сначала мне его надо создать (это я уже сделал), а затем провести валидацию по xsd схеме. А чтобы провести валидацию надо при создании в корневой элемент воткнуть пространство имен и ссылку на xsd схему. Это по моему функция Add и делает, и раз уж в этом топике о ней разговор зашел...
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34146302
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smoykИ то и то, одно другого не исключает надеюсь:)просто это разные действия, слабо связанные между собой. Если ты в исходный документ втыкаешь ссылку на схему, парсер это сам разжуёт, ему также можно будет сказать validateOnParse. Когда ты создаёшь схему явно и по ней валидируешь документ - это явная валидация, вроде, не требующая добавления в исходный документ ссылок на схему.
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34146625
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To maXmo
Не не так. У меня в документе есть ошибки (сам сделал), но валидатор молчит. Но в любом случае я б предпочел явно схему воткнуть в документ.
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34146768
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в любом случае узлы в документ добавляются домом (setAttribute и т.п.), а не схемой.
...
Рейтинг: 0 / 0
Как валидировать XML, у которого нет в заголовке ссылки на namespace
    #34148670
Фотография smoyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм факт, протупил чуток. Спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как валидировать XML, у которого нет в заголовке ссылки на namespace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]