2014-01-09 30 views
2

我在寫一個小型的web應用程序來向我的用戶顯示郵件服務器設置。他們輸入他們的電子郵件地址,提交表格,並且它應該返回正確的設置。使用jQuery更新XML文檔並執行XSLT

我使用的工具是用於UI的XML + XSL和用於處理數據檢索的jQuery。最初,我的應用程序沒有上下文,所以XML數據不可用。我只是加載一個鏈接到我的XSL樣式表的基本XML文檔以向用戶顯示錶單。

<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="mail-settings.xsl" ?> 
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006"> 
    <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a"> 
     <Account/> 
    </Response> 
</Autodiscover> 

當提交表單時,jQuery ajax調用會將帳戶設置作爲XML提取。獲得響應後我想要做的是更新當前文檔以包含帳戶信息,然後讓XSL樣式表更新頁面。

$.ajax({ 
    type: "POST", 
    url: "https://myfooserver.com/maildata.xml", //actually points to a wsgi app that returns XML 
    data: xml_request, 
    dataType: "xml", 
    async: false, 
    success: function(account_data){ 
     $("Account").replaceWith(account_data); 
    }, 
    error: function (request, status, error){ 
     alert("Error handler request.responseText: " + request.responseText); 
    } 
}); 

但因爲我發現,沒有什麼是「提神」後,我修改DOM XSL轉換。

我想過的

其他選項包括:

  • 而不是依賴於XSLT的$就調用後,我可以解析XML返回並手動發出HTML錶行(呸)。
  • 做一個POST沒有Ajax,並與該帳戶數據獲取轉換XML包括

我用的是希望有一些辦法可以動態更新XML在客戶端上有顯示設置,如HTML XML + XSLT。任何想讓我的首選解決方案工作的想法?

回答

1

你看過MagicXML嗎?該庫在 「MIT許可證」 發佈,並在有關的部分,使用JavaScript XSLT處理:

xslt = new XSLTProcessor(); 
    xslt.importStylesheet(xsl); //NOTE: this is a string with XML 

    // If we have a parameters array, set the values in the XSLT. 
    if (parameters !== undefined) { 
     for (i; i &lt; parameters.length; i++) { 
      parameter = parameters[i]; 
      xslt.setParameter(
       (parameter.xmlns !== undefined) ? parameter.xmlns : null, 
       parameter.name, 
       parameter.value 
      ); 
     } 
    } 
    return xslt.transformToFragment(xml, document); // NOTE: xml is a string 

template = new ActiveXObject("MSXML2.XSLTemplate.6.0"); 

    template.stylesheet = xsl; // NOTE: a string with XSLT 
    processor = template.createProcessor(); 
    processor.input = xml; // NOTE: a string with XML 

    // If we have a parameters array, set the values in the XSLT. 
    if (parameters !== undefined) { 
     for (i; i < parameters.length; i++) { 
      parameter = parameters[i]; 
      processor.addParameter(
       parameter.name, 
       parameter.value, 
       parameter.xmlns 
      ); 
     } 
    } 

    processor.transform(); 
    return processor.output; 

免責聲明:我沒有使用這個庫自己。