Форум программистов, компьютерный форум, киберфорум
XML/XSL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 9

Как запретить XSLT делать больше, чем требуется

21.03.2024, 15:07. Показов 9948. Ответов 3
Метки xml (Все метки)

Студворк — интернет-сервис помощи студентам
Имеются XML файлы, созданные в процессе экспорта данных, для последующего импорта в другую программу. Файлы содержат сообщения (много), каждое из которых имеет атрибуты "дата создания" и "дата редактирования", – в XML это <created> и <updated> соответственно. Но такая вот незадача: при экспорте сообщения, которое ни разу не редактировалось, в XML отсутствует тег <updated>. Программа-экспортер трактует, что в этом случае дата редактирования равна дате создания и в своем внутреннем формате (.enex) не считает нужным физически создавать элемент updated, равный по значению предшествующему элементу created. А программа импорта в целевую программу (специально заточенная под экспорт данных из этого .enex формата!), в случае отсутствия у сообщения тега updated, сама создает недостающий, с т.з., целевой программы, атрибут "дата редактирования", но вместо вставки значения даты из тега <created> вносит в него текущую дату(!!!). В результате при сортировке сообщений в целевой программе по дате редактирования, сверху оказываются все сообщения, которые ни разу не редактировались ...
Попросил я золотую рыбку ИИ сделать мне XSLT, который перед импортом обработает .ENEX файл и при отсутствии тега <updated> после <created>, добавит отсутствующий <updated> со значением из предшествующего <created>. (Сам я кроме этих названий про обработку Xml практически ничего не знаю, - не программист.) И она он мне это сделала. Не поверите, но это сразу заработало! (не считая ритуальных танцев по установке Xslt-процессора, которыми также руководила золотая рыбка ИИ). Однако с некоторыми дополнительными услугами ...
Во-первых, XSLTPROC (программа - Xslt процессор) почему-то в упор не признает ключевую ссылку "<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export2.dtd">", - пишет что-то о недоступности ресурса. Хотя я сам проверял, все доступно, маленький файлик, моментально скачивается ... Но преобразование файла тем не менее выполняется, а сообщение об ошибке выдается параллельно этому ... Но, помимо сообщения об ошибке, просто не переносит проблемный тег в результирующий файл, а для импорта он нужен. (можно конечно потом доставить эту строку вручную, но .enex-файлов довольно много десятков ...)
Во-вторых, оказалось, что если выполнять преобразование в PowerShell, то в результирующем файле оказывается сломанной русская кодировка. А если то же самое сделать через Командную Строку Windows (10), то кодировка НЕ ломается. Но часть (именно, не все, а только часть) символов "<" и ">" превращаются в коды "&lt;&gt;"...
Отсюда вопрос: можно ли заставить XSLT исполнять только то, что в нем явно указано, без всяких дополнительных "презентов"? Ну не может же быть, что это только у меня повылазило ...
ВОПРОС: Можно ли заставить XSLT исполнять только то, что в нем явно указано?
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
 
<!-- Match 'created' element -->
<xsl:template match="created">
<!-- Copy 'created' element -->
<xsl:copy-of select="."/>
<!-- Check for following 'updated' element -->
<xsl:if test="not(following-sibling::*[1][self::updated])">
<!-- Insert 'updated' element if not present -->
<updated>
<xsl:value-of select="."/>
</updated>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

Командная строка для консоли:
xsltproc --output-encoding utf-8 --novalid d:\Data\Backup\Evernote\UpdateAdd.xsl d:\Data\Backup\Evernote\_Входящие4.enex > d:\Data\Backup\Evernote\_Входящие41.enex
"--output-encoding utf-8" не работает (не использую), а "--novalid" только блокирует вывод сообщения об ошибке доступа URL в <!DOCTYPE ...> (т.е., тоже без толку ...)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2024, 15:07
Ответы с готовыми решениями:

Как делать запрос для таблицы имя которой имеет больше чем одно слово ?
Как делать запрос для таблицы имя которой имеет больше чем одно слово ? Пример: SELECT * FROM для таблицы с именем 'Table Test'.

Запретить вводить больше, чем два знака после запятой в TextBox
Нужно в событие keypress или textchanged добавить код запрещающий ввод более двух знаков после запятой.

Триггер: запретить заказывать товар, если количество товара в заказе будет больше чем количество на складе
Какое будет условие для триггера если количество товара в заказе будет больше чем количества на складе?? в таблице product есть поля:...

3
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,809
21.03.2024, 18:07
тему стоит перенести либо в https://www.cyberforum.ru/powershell/,
либо в https://www.cyberforum.ru/xml-xsl/.

автору стоит прикрепить реальный образец xml ( не испортив реальную кодировку файла)
и рассказать про версию powershell ( 5.1 ? )
0
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,511
Записей в блоге: 9
21.03.2024, 20:19
Можно и перенести. Michaj, вам в какой раздел больше нравится?
0
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 9
22.03.2024, 00:05  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
тему стоит перенести либо в https://www.cyberforum.ru/powershell/,
либо в https://www.cyberforum.ru/xml-xsl/.
автору стоит прикрепить реальный образец xml ( не испортив реальную кодировку файла)
и рассказать про версию powershell ( 5.1 ? )
Во второй конечно. Я искал подобный, но почему-то не нашел
Версия PowerShell 5.1.
Прикрепил реальные образцы xml (.enex в zip). В которых по 2 заметки редактированные, и 3 не редактированные. ForExample.zip - не порченный, а ForExample1.zip - тот же, но порченный моим Xslt (из Командной строки).
Вложения
Тип файла: zip ForExample.zip (66.9 Кб, 3 просмотров)
Тип файла: zip ForExample1.zip (66.9 Кб, 0 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2024, 00:05
Помогаю со студенческими работами здесь

Как запретить камере делать фото?
Как запретить камере делать фото ?? Есть ли такая настройка в андроид?? то есть если я даже нажимаю в приложении камера сделать фото, но...

Требуется Net-программист со знанием XSLT
Приглашаем на работу Net программиста со знаниями XML/XSLT. Требования: Отличное знание Net-платформы ASP .Net (C#) XML/XSLT ...

Как запретить вводить больше 50?
Как запретить вводить больше числа 50 в textbox2? И как сделать, что бы в это же поле можно было вводить только цифры!

Требуется на работу Net программист со знаниями XML/XSLT
Приглашаем на работу Net программиста со знаниями XML/XSLT. Требования: Отличное знание Net-платформы ASP .Net (C#) XML/XSLT ...

Требуется определить количество элементов, значение которых больше, чем у соседних элементов массива
Требуется определить количество элементов, значение которых больше, чем у соседних элементов массива. Прошу помочь , заранее спасибо за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru