Резултати от 1 до 8 от общо 8

XML-XSLT-JS

Сподели във Facebook Сподели в Twitter Изпрати на Email Сподели в LinkedIn
  1. Member
    Тук е от
    Feb 2006
    Мнения
    649
    #1

    XML-XSLT-JS

    Да ви поизпитам малко: имам ХМЛ файл с набор от книги да кажем, и всяка книга си има сериен номер за атрибут (не детенце):
    Код:
    <боок id="01">
    	<name>пешо в гората</name>
     	<comments>тегаво е</comments>
    </боок>
    Имам и XSLT файлче което форматира гореспоменато, тънкото тук е че то изкарва точно определена книга и само нея... представете си списък с книжки, ти цъкаш на някоя и в следващия прозорец се появява информацията за нея САМО... и ето го проблема - как да засиля някъф вид параметър към XSL файла и как да го обработя там с ДжаваСрипт. Има няколко оферти ала те или не работят нещо или само на ИЕ и до някъде. Ще разбия проблема на две части пращането на параметъра и обработването му...който има идей по едно от двете или двете ще съм благодарен...

  2.  
     
  3. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #2

    Re: XML-XSLT-JS

    Може би това да помогне:

    http://developer.mozilla.org/en/docs...ransformations

    А ако те разбирам правилно, нищо не пречи да добавиш в трансформацията примерно:
    Код:
    <script>alert('<xsl:value-of select="@id"/>');</script>

  4. Member
    Тук е от
    Feb 2006
    Мнения
    649
    #3

    Re: XML-XSLT-JS

    Готово измъдрихме го...ако на някой му е интересно да каже да цъкна кода
    (да знайте много съм умен ей ...а и чичко гугъл също)

  5. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #4

    Re: XML-XSLT-JS

    На мен ми е интересно.
    Ако може дай линкче?
    Защото при мен пък възникват повече проблеми с Трансформатора на IE.

  6. Member
    Тук е от
    Feb 2006
    Мнения
    649
    #5

    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]">

  7. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #6

    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);
     }
    }

  8.  
     
  9. Member
    Тук е от
    Feb 2006
    Мнения
    649
    #7

    Re: XML-XSLT-JS

    Сега какви са тези неудобни въпроси
    Мерси за акъла, знаех си че има още нещо

  10. Senior Member Аватара на Bibi
    Тук е от
    Nov 2004
    Мнения
    2,757
    #8

    Re: XML-XSLT-JS

    Просто скрипта ти се състои от 2 части - едната праща заявки, с които изтегля двата файла - xml и xsl.
    За нея казвам, че е достатъчно да се пусне веднъж, на onLoad.
    А втората част пуска трансформацията на onClick.

    // -------------
    Аз дори се чудя за такъв тип проект дали има смисъл да се ползва AJAX.
    Защото на първи пас пращаш почти само скрипта, а повечето от него служи, за да си поиска на втори рекуест самите данни.
    И, доколкото тия данни са неизменни и предварително известни, би могло да заминат още на първия рекуест и тогава голямата част от скрипта става излишна.
    Но не успях да го измисля как да стане на практика.

Сподели във Facebook Сподели в Google Plus Сподели в Twitter Изпрати на Email Сподели в LinkedIn

SetCombG.com
SetCombG.com е портален сайт и Форум за битова техника, телевизори, климатици, лаптопи и смартфони, създаден през 1999 година.
Заедно сме над 20 години!
Следвай ни
Горе