Форум программистов, компьютерный форум, киберфорум
Наши страницы
XML/XSL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
olya_p
0 / 0 / 0
Регистрация: 07.08.2018
Сообщений: 5
#1

Узнать переменные, которые знает шаблон

07.08.2018, 11:37. Просмотров 665. Ответов 8
Метки нет (Все метки)

Здравствуйте.

Есть закрытая софтина, в которой есть несколько шаблонов отправляемых писем. Один из них работает неверно. Ему некорректно передаются переменные. Связаться с разработчиком нет возможности. Сломать тоже. Можем только изменить шаблон.

К сожалению, совсем не знакома с XSL. При помощи гугла попробовала получить список переменных так:

Код
<xsl:for-each select="root">
	<n><xsl:value-of select="."/></n>
</xsl:for-each>
В возвращенном результате есть нужные данные, но я не понимаю, как их оттуда выцепить, потому что выводится просто одна склеенная строка такого вида:

Код
07.08.2018%2011:18:08?????????%20?????????1b00000181b1db1cMSG_COMMISSION_IS_DONE??%20(????????%20???????????)00900000181246d301100000180021912
Помогите, пожалуйста, переписать цикл, чтобы получить отдельные названия и значения переменных, если это возможно.

Дополнительно еще возникает проблема с кодировкой.
В шаблоне заменила на utf-8:
Код
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
А в полученном сообщении все равно вот так:
Код
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2018, 11:37
Ответы с готовыми решениями:

Когда я вставляю в шаблон переменные из php,т.е по MVC у меня страница становиться не валидной
Здравствуйте пользователь форума У меня возник вот такой вопрос, когда я...

Как передавать текстовые переменные из VB??? Неужели никто не знает?
Задача: передать хр. процедуре параметр типа nvarchar. В VB как ни стараюсь -...

Кто знает хороший IDE для ПХП чтобы можно было видеть и вставлять методы и переменные созданых классов?
Всем привет. Кто знает хороший IDE для ПХП чтобы можно было видеть и...

Открыть программы, которые знает Windows
Добрый день! Помогите пожалуйста с следующим. Мне нужно чтобы я мог ввести...

Создать простой шаблон, где будут экранированы переменные от основного файла
Всем привет. У меня возникла задача, подключать шаблоны к основному коду. И...

8
diadiavova
3738 / 1297 / 410
Регистрация: 11.04.2015
Сообщений: 2,408
Записей в блоге: 35
07.08.2018, 12:48 #2
olya_p, XSLT трансформирует XML-документ. То есть, если используется этот формат, значит есть где-то документ-источник преобразования. Если требуется получить данные из этого источника(то есть из XML-документа), то неплохо было бы для начала ознакомиться с его структурой, ну и заодно узнать, что именно нужно искать в этом документе и в каком виде это извлечь. А в данном случае из описания невозможно что-либо посоветовать.
1
olya_p
0 / 0 / 0
Регистрация: 07.08.2018
Сообщений: 5
07.08.2018, 12:54  [ТС] #3
diadiavova, спасибо за ответ. Боюсь, что у нас xml формируется где-то внутри программы. И изменить его нет возможности.
0
diadiavova
3738 / 1297 / 410
Регистрация: 11.04.2015
Сообщений: 2,408
Записей в блоге: 35
07.08.2018, 13:56 #4
Лучший ответ Сообщение было отмечено olya_p как решение

Решение

Цитата Сообщение от olya_p Посмотреть сообщение
Боюсь, что у нас xml формируется где-то внутри программы. И изменить его нет возможности.
Ну этого-то как раз бояться и не нужно, а об изменении документа-источника тоже речи не идет. Если есть возможность подсунуть собственный XSLT и преобразовать документ с его помощью, то можно использовать тождественное преобразование для получения в результате документа-источника. Вот, например, такого
XML
1
2
3
4
5
6
7
8
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
1
olya_p
0 / 0 / 0
Регистрация: 07.08.2018
Сообщений: 5
07.08.2018, 14:08  [ТС] #5
diadiavova, Вы - гений!

Получился примерно такой xml:

Код
<?xml version="1.0" encoding="UTF-8"?>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">

<root>
	<args>
		<message_text>?????????%20?????????</message_text>
		<object_name>??%20(????????%20???????????)</object_name>
		<package_id>0900000181246d30</package_id>
	</args>
	<kc_user id="0000000000000000">
		<ka_surname_ru>рПРПЧБ</ka_surname_ru>
	</kc_user>
</root>
Не понимаю, откуда берется koi8-r.
Подскажите, пожалуйста, есть ли какая-нибудь возможность побороть здесь кодировку?
0
diadiavova
3738 / 1297 / 410
Регистрация: 11.04.2015
Сообщений: 2,408
Записей в блоге: 35
07.08.2018, 14:18 #6
Цитата Сообщение от olya_p Посмотреть сообщение
Получился примерно такой xml:
Если примерно, то возможно, поскольку конкретно в таком виде это не XML. У XML должен быть один корневой элемент и на верхнем уровне кроме него элемнтов быть не может, там только декларация хмл, могут быть комментарии, инструкции приложения и доктайп. Так что откуда здесь взялся meta - непонятно. Но вполне очевидно, что именно он и перекочевал в выходной документ. Надо теперь смотреть преобразование, и там это дело менять.

Добавлено через 4 минуты
Возможно программа сама вставляет этот элемент, предполагая, что на выходе html. Можно попробовать добавить <xsl:outpu method="xml"/>. Но вообще надо еще преобразование смотреть. Если программа выполняет какую-то постобработку, и этот мета-элемент появляется в результате ее работы, то, не исключено, что победить это можно будет только дополнительной обработкой результирующего документа.
0
olya_p
0 / 0 / 0
Регистрация: 07.08.2018
Сообщений: 5
07.08.2018, 14:24  [ТС] #7
Из ответа убрала только ненужные поля.

Все, что доступно, это файл default.xsl со следующим текстом:
Код
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/> 

<xsl:template match="/">
<HTML>
<HEAD> 
	<TITLE>Уведомление</TITLE>
</HEAD>

<BODY bgColor="#ffffff">
	<P><FONT face="Arial" size="2">Уведомление</FONT></P>	
	<DIV><FONT face="Arial" size="2">Уважаемый(ая) 
		<xsl:value-of select="root/kc_user/ka_surname_ru"/>
		</FONT></DIV>
		
	<DIV><FONT face="Arial" size="2">Вы получили уведомление: 
		<xsl:value-of select="root/dmi_queue_item/message"/></FONT></DIV>
		
	<DIV><FONT face="Arial" size="2">К уведомлению прилагается документ: 
		<xsl:value-of select="root/kc_document/ka_object_name"/></FONT></DIV>	
		

</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
UPD. Письмо приходит корявое, т.к. в xml-ке нет этих переменных.
0
diadiavova
3738 / 1297 / 410
Регистрация: 11.04.2015
Сообщений: 2,408
Записей в блоге: 35
07.08.2018, 14:41 #8
Ну, судя по всему элемент meta вставляется просто программой, и побороть его, возможно, удастся, если поковыряться в настройках программы, поскольку я очень сомневаюсь, что программа работает только с одной кодировкой и причем именно с этой.
1
olya_p
0 / 0 / 0
Регистрация: 07.08.2018
Сообщений: 5
07.08.2018, 14:44  [ТС] #9
Еще раз огромное Вам спасибо!
Главное, что удалось выцарапать идентификатор. А прогу расковырять нет возможности.
0
07.08.2018, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2018, 14:44

Узнать переменные равные 0?
Доброе время суток всем, у меня возник такой вопрос, я получаю ассоциативный...

Как узнать внутренние переменные windows?
Как узнать внутренние переменные windows например path

Узнать все переменные передающие в функцию
Как узнать все переменные передающие в функцию? Многие для этого используют IDA...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru