Поиск по XML у клиента. Это возможно?

Energizer

Guest
Поиск по XML у клиента. Это возможно?

Генерю XML-файл, передаю его клиенту. В нем должна быть форма поиска по этому файлу. В зависимости от введенных параметров поиска он видит результат. В качестве парсера выступает IE. Такое вообще возможно?
Буду признателен за любую инфу в этом направлении. Спасибо.
 

Energizer

Guest
Эээх примерчик бы еще...
Кстати, я видел такой фокус где-то.
 

Sababa

Guest
можно

я сделал такой телефонный справочник например..
если не лень, разбирайся, xslt не привожу, думаю и так понятно что там

phones.js:

PHP:
var oXML, oXSLT;

function InitPage() {
	if ( typeof(oXParams) != "object" || oXParams == null ) {
		alert("Object oXParams is not initialized");
	}

	oXML = new CXML(oXParams.base_dir + '/phones.xml');
	oXSLT = new CXSLT(oXParams.base_dir + '/phones.xsl');

	renderPage(Transform('', '', ''));
}

function find(f) {
	renderPage(Transform(f.loc.value, f.phone.value, f.addr.value));
}

// ------- Classs CXSLT keeps XSLT stylesheet ----------
//
//
function CXSLT(xsltURL) {
	this._xsltDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
	this._xsltDoc.async = false;
	
	this._xsltDoc.load(xsltURL);

	var err = this._xsltDoc.parseError;
	if ( err.errorCode != 0 ) {
		alert("You have error [code=" + err.errorCode + "] " + err.reason);
	}
}

//
//
CXSLT.prototype.getXSLTDoc = function() {
	return this._xsltDoc;
}

// ------- Classs CXML keeps XML document ----------
//
//
function CXML(xmlURL) {
	this._xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
	this._xmlDoc.async = false;
	
	this._xmlDoc.load(xmlURL)
	
	var err = this._xmlDoc.parseError;
	if ( err.errorCode != 0 ) {
		alert("You have error [code=" + err.errorCode + "] " + err.reason);
	}
}

//
//
CXML.prototype.getXMLDoc = function() {
	return this._xmlDoc;
}

function Transform(loc, phone, addr) {
	var xslProc;
	var xslt = new ActiveXObject("Msxml2.XSLTemplate");
	xslt.stylesheet = oXSLT.getXSLTDoc();
	xslProc = xslt.createProcessor();
	xslProc.input = oXML.getXMLDoc();
	xslProc.addParameter("base.dir", oXParams.base_dir);
	xslProc.addParameter("loc", loc);
	xslProc.addParameter("phone", phone);
	xslProc.addParameter("addr", addr);
	xslProc.transform();
	return xslProc.output;
}

function renderPage(contents) {
	oPhones.innerHTML = contents;
}
html:

PHP:
    <script language="javascript" src="/js/phones.js">
		</script>
    <script language="JavaScript">
<!--
			function XSLTParams() {
				this.lang = "ru";
				this.base_dir = "/ru";
			}
			var oXParams = new XSLTParams();
		-->
    </script>
    <script language="javascript">
<!--
			window.onload = InitPage;
		-->
    </script>
          <table width="750" border="1" style="background-color: white;">
            <thead>
              <tr bgcolor="#000080">
                <th colspan="4">
                  <font color="#FFFFFF">Список телефонных номеров</font>
                </th>
              </tr>
              <tr bgcolor="#C7C7C7">
                <td width="35%">
                  <div class="marg">
                    <b>Зал</b>
                  </div>
                </td>
                <td width="25%">
                  <div class="marg">
                    <b>Телефон</b>
                  </div>
                </td>
                <td width="40%">
                  <div class="marg">
                    <b>Адрес</b>
                  </div>
                </td>
              </tr>
              <form autocomplete="off">
                <tr bgcolor="#C7C7C7">
                  <td width="35%">
                    <div class="marg">
                      <input type="text" name="loc" onkeyup="javascript:find(this.form)"/>
                    </div>
                  </td>
                  <td width="25%">
                    <div class="marg">
                      <input type="text" name="phone" onkeyup="javascript:find(this.form)"/>
                    </div>
                  </td>
                  <td width="40%">
                    <div class="marg">
                      <input type="text" name="addr" onkeyup="javascript:find(this.form)"/>
                    </div>
                  </td>
                </tr>
              </form>
            </thead>
            <tr>
              <td id="oPhones" colspan="3"/>
            </tr>
          </table>
 

Energizer

Guest
Спасибо, Sababa
Если не затруднит напиши пож-ста ссылку на оригинал, очень хочется поглазеть как это в природе выглядит.
 

Sababa

Guest
К сожалению, оригинал находится на внутрикорпоративном сайте..

Была бы фантазия и желание, а сделать можно что угодно

Пробуй, если будут возникать вопросы, попробуем помочь.
 

Energizer

Guest
Автор оригинала: Sababa
Пробуй, если будут возникать вопросы, попробуем помочь.
Не совсем понятно что происходит в xsl-ке, как туда передаются параметры из JS?
 

Sababa

Guest
PHP:
function Transform(loc, phone, addr) { 
    var xslProc; 
    var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 
    xslt.stylesheet = oXSLT.getXSLTDoc(); 
    xslProc = xslt.createProcessor(); 
    xslProc.input = oXML.getXMLDoc(); 
    xslProc.addParameter("base.dir", oXParams.base_dir); 
    xslProc.addParameter("loc", loc); 
    xslProc.addParameter("phone", phone); 
    xslProc.addParameter("addr", addr); 
    xslProc.transform(); 
    return xslProc.output; 
}
xslProc.addParameter("param", param);

как раз передает параметр в xslt
 

Energizer

Guest
Всем спасибо, вроде что-то получилось. :)))
 
Сверху