Параметр XSLT процессора через IE URL
От: [darkening]  
Дата: 06.03.03 10:55
Оценка:
Доброе время суток!

У меня есть достаточно большой XML файл. Из него надо переодически вытягивать элементы с определенными параметрами(id).

Например:

<item id="cool">
<!-- ...не важно -->
</item>

<item id="cool2">
<!-- ...не важно -->
</item>

Т.е. нужно отобразить все элементы с заданным id. Для этого я написал небольшой XSLT шаблон. Все бы хорошо, но как в XSLT передать параметр через IE URL? Было бы удобно вызывать, например: "myfile.xml?forid=cool", и тем самым не плодить клоны этих шаблонов.

Здесь уже как-то поднимали этот ворос, но конкретных примеров так и не было...
---
Всего хорошего,
Евгений.
Re: Параметр XSLT процессора через IE URL
От: thor Россия  
Дата: 06.03.03 11:19
Оценка:
Здравствуйте, [darkening], Вы писали:

D>Доброе время суток!


D>Т.е. нужно отобразить все элементы с заданным id. Для этого я написал небольшой XSLT шаблон. Все бы хорошо, но как в XSLT передать параметр через IE URL? Было бы удобно вызывать, например: "myfile.xml?forid=cool", и тем самым не плодить клоны этих шаблонов.


Можно передавать параметры в XSLT процессор, например так

var xslt = Server.CreateObject("Msxml2.XSLTemplate.4.0");
var xslDoc = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0");var xslProc;
xslDoc.async = false;
xslDoc.load(Server.MapPath("myfile.xsl"));
xslt.stylesheet = xslDoc;
var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load(Server.MapPath("myfile.xml"));
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("forid", "cool");
xslProc.transform();


А в xslt объявить <xsl:param name="forid"/>
в которую будет передаваться значение параметра.
Re[2]: Параметр XSLT процессора через IE URL
От: [darkening]  
Дата: 06.03.03 17:19
Оценка:
Здравствуйте, thor, Вы писали:

D>>Т.е. нужно отобразить все элементы с заданным id. Для этого я написал небольшой XSLT шаблон. Все бы хорошо, но как в XSLT передать параметр через IE URL? Было бы удобно вызывать, например: "myfile.xml?forid=cool", и тем самым не плодить клоны этих шаблонов.


T>Можно передавать параметры в XSLT процессор, например так


T>
T>var xslt = Server.CreateObject("Msxml2.XSLTemplate.4.0");
[.......]
T>xslProc.addParameter("forid", "cool");
T>xslProc.transform();
T>


Ошибку выдает — The Server is undefined.

Можно простенький пример использования? Заранее спаисбо.
... << RSDN@Home 1.0 beta 6a >>
---
Всего хорошего,
Евгений.
Re[3]: Параметр XSLT процессора через IE URL
От: thor Россия  
Дата: 07.03.03 12:00
Оценка:
Здравствуйте, [darkening], Вы писали:

D>Ошибку выдает — The Server is undefined.


D>Можно простенький пример использования? Заранее спаисбо.


Привожу исходники небольшого примера, у меня работают

test.xml
<?xml version="1.0" encoding="windows-1251"?>
<items>
    <item id="cool">item1</item>
    <item id="cool2">item2</item>
    <item id="cool">item3</item>    
</items>


test.xslt
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="1.0" encoding="windows-1251" indent="yes"/>
    
    <xsl:param name="forid"/>
    
    <xsl:template match="*">
        <xsl:apply-templates select="//item"/>
    </xsl:template>
    
    <xsl:template match="item">
        <xsl:if test="@id=$forid">
            <xsl:value-of select="text()"/><br/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>


test.asp
<%@language="JScript"%>
<%
    var xslt = Server.CreateObject("Msxml2.XSLTemplate.4.0");
    var xslDoc = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0");
    var xslProc;
    try {
        xslDoc.async = false;
        xslDoc.load(Server.MapPath('test.xslt'));
        xslt.stylesheet = xslDoc;
        var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.4.0");
        xmlDoc.async = false;
        xmlDoc.validateOnParse = false;
        var b = xmlDoc.load(Server.MapPath('test.xml'));
        xslProc = xslt.createProcessor();
        xslProc.input = xmlDoc;
        xslProc.addParameter("forid", "cool2") 
        xslProc.transform();
        var out = xslProc.output;
        Response.write(out)
    }
    catch(e){
        Response.Write('fail');
    }
%>



Если возникнут пробемы ICQ #147468765
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.