-
XML-XSLT-JS
Да ви поизпитам малко: имам ХМЛ файл с набор от книги да кажем, и всяка книга си има сериен номер за атрибут (не детенце):
Код:
<боок id="01">
<name>пешо в гората</name>
<comments>тегаво е</comments>
</боок>
Имам и XSLT файлче което форматира гореспоменато, тънкото тук е че то изкарва точно определена книга и само нея... представете си списък с книжки, ти цъкаш на някоя и в следващия прозорец се появява информацията за нея САМО... и ето го проблема - как да засиля някъф вид параметър към XSL файла и как да го обработя там с ДжаваСрипт. Има няколко оферти ала те или не работят нещо или само на ИЕ и до някъде. Ще разбия проблема на две части пращането на параметъра и обработването му...който има идей по едно от двете или двете ще съм благодарен...
-
Re: XML-XSLT-JS
Може би това да помогне:
http://developer.mozilla.org/en/docs...ransformations
А ако те разбирам правилно, нищо не пречи да добавиш в трансформацията примерно:
Код:
<script>alert('<xsl:value-of select="@id"/>');</script>
-
Re: XML-XSLT-JS
Готово измъдрихме го...ако на някой му е интересно да каже да цъкна кода
(да знайте много съм умен ей ...а и чичко гугъл също)
-
Re: XML-XSLT-JS
На мен ми е интересно.
Ако може дай линкче?
Защото при мен пък възникват повече проблеми с Трансформатора на IE.
-
Re: XML-XSLT-JS
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm...sitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>book info</title>
</head>
<body>
<table width="100%" border="1">
<tr>
<td onclick="loadXML('01')">book 1</td>
<td onclick="loadXML('02')">book 2</td>
</tr>
</table>
<div id="example"></div>
<script type="text/javascript">
function loadXML(id)
{
var isIE;
var isOpera;
var isNav;
isIE = (navigator.appName == "Microsoft Internet Explorer");
isNav = (navigator.appName == "Netscape");
isOpera = (navigator.appName == "Opera");
if (isIE)
{// Load your XSL
var objXSLT = new ActiveXObject("MSXML2.FreeThreadedDomDocument")
objXSLT.async = false
objXSLT.load("stats.xsl")
// create a compiled XSL-object
var objCompiled = new ActiveXObject("MSXML2.XSLTemplate")
objCompiled.stylesheet = objXSLT.documentElement
// create XSL-processor
var objXSLProc = objCompiled.createProcessor()
// Load your XML
var objXML = new ActiveXObject("MSXML2.FreeThreadedDomDocument")
objXML.async = false
objXML.load("stats.xml")
// input for XSL-processor
objXSLProc.input = objXML
objXSLProc.addParameter("book_id", id)
// etc.
// transform
objXSLProc.transform()
// display
document.getElementById('example').innerHTML=objXSLProc.output;
}
if (isNav)
{//for mozilla/netscape
var xslStylesheet;
var xsltProcessor = new XSLTProcessor();
// load the xslt file, example1.xsl
var myXMLHTTPRequest = new XMLHttpRequest();
myXMLHTTPRequest.open("GET", "stats.xsl", false);
myXMLHTTPRequest.send(null);
// get the XML document and import it
xslStylesheet = myXMLHTTPRequest.responseXML;
xsltProcessor.importStylesheet(xslStylesheet);
// load the xml file, example1.xml
myXMLHTTPRequest = new XMLHttpRequest();
myXMLHTTPRequest.open("GET", "stats.xml", false);
myXMLHTTPRequest.send(null);
var xmlSource = myXMLHTTPRequest.responseXML;
xsltProcessor.setParameter(null,"book_id",id);
var resultDocument = xsltProcessor.transformToFragment(xmlSource, document);
document.getElementById('example').innerHTML="";
document.getElementById('example').appendChild(resultDocument);
}
}
</script>
</body>
</html>
Ето това е цялата борба. Отваря ги в същия файл, за момента реших че ще е по-удобно...иначе в xsl файла имаш параметър book_id, който го използваш като:
Код:
<xsl:for-each select="book[@id=$book_id]">
-
Re: XML-XSLT-JS
Само че така не е хубаво!
Защо теглиш един и същи документ на всяко кликане???
Достатъчно е да го изтеглиш веднъж.
Премести целия ajax в хедъра, а във функцията остави само сетването на параметъра, прилагането на трансформацията и писането в документа.
Т.е. там да остане само това:
Код:
function loadXML(id) {
if (isIE) {
objXSLProc.addParameter("book_id", id);
objXSLProc.transform();
document.getElementById('example').innerHTML = objXSLProc.output;
}
else if (isNav) {
xsltProcessor.setParameter(null,"book_id",id);
var resultDocument = xsltProcessor.transformToFragment(xmlSource, document);
document.getElementById('example').innerHTML = "";
document.getElementById('example').appendChild(resultDocument);
}
}
-
Re: XML-XSLT-JS
Сега какви са тези неудобни въпроси :)
Мерси за акъла, знаех си че има още нещо :)
-
Re: XML-XSLT-JS
Просто скрипта ти се състои от 2 части - едната праща заявки, с които изтегля двата файла - xml и xsl.
За нея казвам, че е достатъчно да се пусне веднъж, на onLoad.
А втората част пуска трансформацията на onClick.
// -------------
Аз дори се чудя за такъв тип проект дали има смисъл да се ползва AJAX.
Защото на първи пас пращаш почти само скрипта, а повечето от него служи, за да си поиска на втори рекуест самите данни.
И, доколкото тия данни са неизменни и предварително известни, би могло да заминат още на първия рекуест и тогава голямата част от скрипта става излишна.
Но не успях да го измисля как да стане на практика.