Home Backend Development XML/RSS Tutorial Flexibly call xsl to parse xml documents (js asynchronous)

Flexibly call xsl to parse xml documents (js asynchronous)

Feb 27, 2017 pm 05:06 PM

   1.新建一个vs2003的web工程,取名为xmlTest

     2.将工程目录下的WebForm1.aspx中内容全部删除,只留下顶部的一条语句:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="XMLTest.WebForm1" %>
Copy after login

3.修改WebForm1.aspx.cs中内容,在Page_Load中加入:

以下是引用片段:

    XmlDocument doc=new XmlDocument(); 
    String xmlfile=string.Empty; 
    xmlfile=Context.Request.PhysicalapplicationPath+(Request.QueryString["sel"].ToString()=="xml"?"\\hello.xml":"\\hello.xsl"); 
    doc.Load(xmlfile); 
    Response.Write(doc.InnerXml);
Copy after login

4.在工程根目录下新增test.htm,并设为工程首页:

以下是引用片段:

<html> 
<head> 
  <title></title> 
</head> 
<body> 
  <div id="resTree"></div> 
  <FONT face="宋体"></FONT><input type="button" value="执行" onclick="GetXml()"><BR> 
  <script language="JScript"> 
  var srcTree,xsltTree,xt; 
  var http_request = false; 
    
  function GetXml() 
  {     
   srcTree = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
    srcTree.async=false; 
    xsltTree= new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
    xsltTree.async = false; 
    xt=new ActiveXObject("MSXML2.XSLTemplate"); 
   resTree.innerHTML=""; 
    makeRequest("WebForm1.aspx?sel=xml",GetXml_CB); 
  } 
     
    function makeRequest(url,callback) { 
        http_request = false; 
        if (window.xmlhttpRequest) { // Mozilla, Safari,... 
            http_request = new XMLHttPRequest(); 
            if (http_request.overrideMimeType) { 
                http_request.overrideMimeType(&#39;text/xml&#39;); 
            } 
        } else if (window.ActiveXObject) { // IE 
            try { 
                http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
            } catch (e) { 
                try { 
                    http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
                } catch (e) {} 
            } 
        }
        if (!http_request) { 
            alert(&#39;Giving up :( Cannot create an XMLHTTP instance&#39;); 
            return false; 
        } 
        http_request.onreadystatechange = callback; 
        http_request.open(&#39;GET&#39;, url, true); 
        http_request.send(null); 
    }
    function GetXml_CB() {
        if (http_request.readyState == 4) { 
            if (http_request.status == 200) {     
    srcTree.loadXML(http_request.responseText); 
    makeRequest("WebForm1.aspx?sel=xsl",GetXsl_CB); 
            } else { 
                alert(&#39;There was a problem with the request.&#39;); 
            } 
        }
    } 
     
    function GetXsl_CB(){ 
       if (http_request.readyState == 4) { 
         if (http_request.status == 200) { 
       xsltTree.loadXML(http_request.responseText); 
       xt.stylesheet=xsltTree; 
       var proc=xt.createProcessor(); 
       proc.input=srcTree; 
       proc.transform(); 
       resTree.innerHTML=proc.output; 
            } else { 
                alert(&#39;There was a problem with the request.&#39;); 
            } 
        } 
   
    }
    function makeRequest(url,callback) { 
     http_request = false; 
     if (window.XMLHttpRequest) { // Mozilla, Safari,... 
            http_request = new XMLHttpRequest(); 
            if (http_request.overrideMimeType) { 
                http_request.overrideMimeType(&#39;text/xml&#39;); 
            } 
        } else if (window.ActiveXObject) { // IE 
            try { 
                http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
            } catch (e) { 
                try { 
                    http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
                } catch (e) {} 
            } 
        }
        if (!http_request) { 
            alert(&#39;Giving up :( Cannot create an XMLHTTP instance&#39;); 
            return false; 
        } 
        http_request.onreadystatechange = callback; 
        http_request.open(&#39;GET&#39;, url, true); 
        http_request.send(null); 
    }
  </script>
</body> 
</html>
Copy after login

5.运行工程,看看效果吧!

hello.xml(注意:我的xml文档中并没有指定对应的xsl解析文件名)

以下是引用片段:

<?xml version=&#39;1.0&#39;?>
<breakfast-menu> 
  <food> 
    <name>Belgian Waffles</name> 
    <price>$5.95</price> 
    <description>Two of our famous Belgian Waffles  
      with plenty of real maple syrup.</description> 
    <calories>650</calories> 
  </food> 
  <food> 
    <name>Strawberry Belgian Waffles</name> 
    <price>$7.95</price> 
    <description>Light Belgian waffles covered with  
     strawberries and whipped cream.</description> 
    <calories>900</calories> 
  </food> 
  <food> 
    <name>Berry-Berry Belgian Waffles</name> 
    <price>$8.95</price> 
    <description>Light Belgian waffles covered  
      with an assortment of fresh berries  
      and whipped cream.</description> 
    <calories>900</calories> 
  </food> 
  <food> 
    <name>French Toast</name> 
    <price>$4.50</price> 
    <description>Thick slices made from our homemade  
     sourdough bread.</description> 
    <calories>600</calories> 
  </food> 
  <food> 
    <name>Homestyle Breakfast</name> 
    <price>$6.95</price> 
    <description>Two eggs, bacon or sausage, toast,  
      and our ever-popular hash browns.</description> 
    <calories>950</calories> 
  </food> 
</breakfast-menu>
Copy after login

hello.xsl

以下是引用片段:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
  <xsl:template match="/breakfast-menu">
        <xsl:for-each select="food"> 
          <DIV STYLE="background-color:teal; color:white; padding:4px"> 
            <SPAN STYLE="font-weight:bold; color:white"><xsl:value-of select="name"/></SPAN> 
            至 <xsl:value-of select="price"/> 
          </DIV> 
          <DIV STYLE="margin-left:20px; margin-bottom:1em; font-size:10pt"> 
            <xsl:value-of select="description"/> 
            <SPAN STYLE="font-style:italic"> 
              <xsl:value-of select="calories"/> 嘿嘿 
            </SPAN> 
          </DIV> 
        </xsl:for-each>
  </xsl:template> 
</xsl:stylesheet>
Copy after login

xml文档只有纯粹的数据,如果需要显示到html页面中的话,一般需要使用定制的xsl文档来解析,或者手工通过js来读取xml中的值显示到html中的dom树中,当使用xsl文档来解析时,相应的xml文档中必须指定对应的xsl文档才能正常显示,但当有些程序动态输出xml文档时,并没有指定相应的xsl文档,这时就必须通过其它途径来加载相应的xsl文档来解析,当然,在服务器端输出xml文档时,通过一些xml api也可以实现,我这儿描述的是通过js来实现的一种方式。用这种方式的话,就抛开了服务器平台的限制,服务器端只需要输出相应的xml文档(.net/j2ee都可以),并且将对应的xsl文档输出给客户端(可以输出流或直接在客户端加载xsl文档)。

     这里有几个需要注意的地方,我们一般是使用Msxml2.Document组件来加载xml文档的,但当动态使用xsl解析xml文档时,必须使用Msxml2.FreeThreadedDOMDocument这种自由线程的组件,同时使用MSXML2.XSLTemplate模板组件来加载xml,xsl数据,通过MSXML2.XSLTemplate的transform方法,就可以动态的用xsl来解析xml数据了,另外,IE5开始,系统默认的xml组件是msxml2,如果需要使用更新的msxml组件需要安装更新的msxml组件包,并指定新的名称,例如Msxml2.FreeThreadedDOMDocument.4.0,现在最新的msxml组件是6.0beta,可在M$网站下载。

 以上就是灵活调用xsl来解析xml文档(js异步)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Is the conversion speed fast when converting XML to PDF on mobile phone? Is the conversion speed fast when converting XML to PDF on mobile phone? Apr 02, 2025 pm 10:09 PM

The speed of mobile XML to PDF depends on the following factors: the complexity of XML structure. Mobile hardware configuration conversion method (library, algorithm) code quality optimization methods (select efficient libraries, optimize algorithms, cache data, and utilize multi-threading). Overall, there is no absolute answer and it needs to be optimized according to the specific situation.

How to convert XML files to PDF on your phone? How to convert XML files to PDF on your phone? Apr 02, 2025 pm 10:12 PM

It is impossible to complete XML to PDF conversion directly on your phone with a single application. It is necessary to use cloud services, which can be achieved through two steps: 1. Convert XML to PDF in the cloud, 2. Access or download the converted PDF file on the mobile phone.

How to convert XML to PDF on your phone? How to convert XML to PDF on your phone? Apr 02, 2025 pm 10:18 PM

It is not easy to convert XML to PDF directly on your phone, but it can be achieved with the help of cloud services. It is recommended to use a lightweight mobile app to upload XML files and receive generated PDFs, and convert them with cloud APIs. Cloud APIs use serverless computing services, and choosing the right platform is crucial. Complexity, error handling, security, and optimization strategies need to be considered when handling XML parsing and PDF generation. The entire process requires the front-end app and the back-end API to work together, and it requires some understanding of a variety of technologies.

How to open web.xml How to open web.xml Apr 03, 2025 am 06:51 AM

To open a web.xml file, you can use the following methods: Use a text editor (such as Notepad or TextEdit) to edit commands using an integrated development environment (such as Eclipse or NetBeans) (Windows: notepad web.xml; Mac/Linux: open -a TextEdit web.xml)

Is there any mobile app that can convert XML into PDF? Is there any mobile app that can convert XML into PDF? Apr 02, 2025 pm 08:54 PM

An application that converts XML directly to PDF cannot be found because they are two fundamentally different formats. XML is used to store data, while PDF is used to display documents. To complete the transformation, you can use programming languages ​​and libraries such as Python and ReportLab to parse XML data and generate PDF documents.

Recommended XML formatting tool Recommended XML formatting tool Apr 02, 2025 pm 09:03 PM

XML formatting tools can type code according to rules to improve readability and understanding. When selecting a tool, pay attention to customization capabilities, handling of special circumstances, performance and ease of use. Commonly used tool types include online tools, IDE plug-ins, and command-line tools.

How to open xml format How to open xml format Apr 02, 2025 pm 09:00 PM

Use most text editors to open XML files; if you need a more intuitive tree display, you can use an XML editor, such as Oxygen XML Editor or XMLSpy; if you process XML data in a program, you need to use a programming language (such as Python) and XML libraries (such as xml.etree.ElementTree) to parse.

How to export pdf with xml How to export pdf with xml Apr 03, 2025 am 06:45 AM

There are two ways to export XML to PDF: using XSLT and using XML data binding libraries. XSLT: Create an XSLT stylesheet, specify the PDF format to convert XML data using the XSLT processor. XML Data binding library: Import XML Data binding library Create PDF Document object loading XML data export PDF files. Which method is better for PDF files depends on the requirements. XSLT provides flexibility, while the data binding library is simple to implement; for simple conversions, the data binding library is better, and for complex conversions, XSLT is more suitable.

See all articles