Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript. Передать параметром фрагмент XML при трансформации / 11 сообщений из 11, страница 1 из 1
18.05.2017, 08:04
    #39455104
DymSig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
Здравствуйте, уважаемые.

Делаю трансформации XML с помощью вот такой функции:

Код: javascript
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.
function Transform(_xml, _xsl, _par) {
    var result;
    var xml = new ActiveXObject("MSXML2.DOMDocument.3.0");
    xml.async = false;
    xml.loadXML(_xml);

    var xsl = new ActiveXObject("MSXML2.FreeThreadedDomDocument.3.0");
    xsl.async = false;
    xsl.loadXML(_xsl);

	var templ = new ActiveXObject("MSXML2.XSLTemplate.3.0");
	templ.stylesheet = xsl.documentElement;
	var proc = templ.createProcessor();
	proc.input = xml;

	if (_par && _par.length > 0) {
		if (_par instanceof Array) { for (i in _par) { proc.addParameter("p" + i, _par[i]) } }
		else { proc.addParameter("p0", _par) }
	}

	proc.transform();
	result = proc.output;

	result = result.replace(new RegExp("[" + decodeURI("\n") + decodeURI("\r") + decodeURI("\t") + "]+", "g"), " ");
	result = result.replace(new RegExp("[ ]+", "g"), " ");

    return result;
}



Строки в параметры трансформации передаются без проблем, но передать фрагмент XML не удается.
Если в XSLT обратится к такому параметру, выдается ошибка: Ссылка на переменную или параметр "p1" должна выдавать список узлов.
Есть ли возможность в javascript передать в трансформацию фрагмент XML?
...
Рейтинг: 0 / 0
18.05.2017, 08:51
    #39455126
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
DymSig , может эта статейка тебе поможет...
https://habrahabr.ru/post/239859/

Там есть ссылки на некую библиотеку, которую рекламирует автор.
...
Рейтинг: 0 / 0
18.05.2017, 10:31
    #39455189
DymSig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
krvsa, спасибо за ответ.

Описанная библиотека, на мой взгляд, обладает небольшим функционалом, связанным с трансформациями. Не увидел там вообще возможность передачи параметра в трансформацию. Основной упор на кроссбраузерность, что в моем случае не принципиально, так как целевой браузер строго IE.
...
Рейтинг: 0 / 0
18.05.2017, 10:56
    #39455212
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
DymSigНе увидел там вообще возможность передачи параметра в трансформацию.
Я встречал "примеры" где параметром трансформации была JS-функция... Она то и возвращала тот xml.
Правда оговаривалось, что это сильно зависит от "обработчика" той трансформации. Т.к. они по-разному синтаксически оформляются и работают.
...
Рейтинг: 0 / 0
18.05.2017, 10:56
    #39455213
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
DymSigЕсли в XSLT обратится к такому параметру, выдается ошибка: Ссылка на переменную или параметр "p1" должна выдавать список узлов.сначала нужно превратить строку из p1 в список узлов, в xslt есть для этого функция, забыл название.
...
Рейтинг: 0 / 0
18.05.2017, 10:59
    #39455218
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
еще есть полезная функция document . если этот фрагмент xml можно вернуть запросом с сервера, то можно в document подставить ссылку.
...
Рейтинг: 0 / 0
18.05.2017, 11:00
    #39455220
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
AntonariyDymSigЕсли в XSLT обратится к такому параметру, выдается ошибка: Ссылка на переменную или параметр "p1" должна выдавать список узлов.сначала нужно превратить строку из p1 в список узлов, в xslt есть для этого функция, забыл название.а, вот она

https://msdn.microsoft.com/en-us/library/ms256197(v=vs.110).aspx
...
Рейтинг: 0 / 0
18.05.2017, 11:01
    #39455222
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
Такой вот "пример" нашел...
http://xmlhack.ru/forum/xml/topic865.html
...
Рейтинг: 0 / 0
19.05.2017, 10:00
    #39455857
DymSig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
Antonariy,

Функция node-set позволяет преобразовать фрагмент результирующего дерева в набор узлов. Я попробовал, строку преобразовать в набор узлов node-set отказался... :(
...
Рейтинг: 0 / 0
19.05.2017, 10:37
    #39455898
DymSig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
krvsa, спасибо, что напомнили про встраиваемые в XSLT скрипты. Нельзя сказать, что красиво, но по-моему получилось то, что нужно:

Код: xml
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.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="urn:user-scripts"
    exclude-result-prefixes="msxsl user">

    <msxsl:script language="JavaScript" implements-prefix="user">
        <![CDATA[ 
             function xml(nodes){  
                var xml = new ActiveXObject("MSXML2.DOMDocument.3.0");
                xml.loadXML(nodes);
                return xml.documentElement; 
                } 
         ]]>
    </msxsl:script>

    <xsl:param name="p0" />
    <xsl:variable name="param" select="user:xml($p0)" />

    <xsl:template match="/">
        <xsl:for-each select="$param/ROW">
            <div>
                <xsl:value-of select="FIO"/>
            </div>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
19.05.2017, 11:27
    #39455968
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript. Передать параметром фрагмент XML при трансформации
DymSigпо-моему получилось то, что нужно
Уже хорошо...
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JavaScript. Передать параметром фрагмент XML при трансформации / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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