asp動態加入xsl:include
範例如下
testXML.asp
testXML.xml
testXML.xsl
輸出結果
這裡要注意的是在testXML.xsl及unitSLT.xsl上都有<xsl:template match="/">的標籤,這樣的情況後面的tag會覆寫前面同名的tag
範例如下
testXML.asp
<%
set htPageDom = Server.CreateObject("MICROSOFT.XMLDOM")
htPageDom.async = false
htPageDom.setProperty("ServerHTTPRequest") = true
'讀取XML File
LoadXML = server.MapPath("/hyweb") & "/testXML.xml"
xv = htPageDom.load(LoadXML)
'讀取XSLT File
set oxsl = Server.CreateObject("MICROSOFT.XMLDOM")
oxsl.load(server.MapPath("/hyweb") & "/testXML.xsl")
'產生xsl:include節點
set incXML = Server.CreateObject("MICROSOFT.XMLDOM")
set incSlt = incXML.createNode(1, "xsl:include","http://www.w3.org/1999/XSL/Transform")
'加入href屬性
Set NewAttribute=incXML.createAttribute("href")
NewAttribute.Text= "unitSLT.xsl"
incSlt.SetAttributeNode NewAttribute
'插入新節點於第一個子節點之前
set oxRoot = oxsl.selectSingleNode("xsl:stylesheet")
oxRoot.insertBefore incSlt,oxRoot.firstChild
'輸出至畫面
Response.ContentType = "text/HTML"
outString = replace(htPageDom.transformNode(oxsl),"<META http-equiv=""Content-Type"" content=""text/html; charset=UTF-16"">","")
outString = replace(outString,"&","&")
response.write replace(outString,"&","&")
%>
testXML.xml
<?xml version="1.0"?>
<A name="0">
<B name="1">
<C>B1C</C>
<C>B1C2</C>
</B>
<B name="2">
<C>B2C1</C>
<C>B2C2</C>
<D>B2D1</D>
</B>
</A>
testXML.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
Use Tempale testXML.xsl<br/>
<xsl:apply-templates select="A/B[1]/parent::*"/>
</xsl:template>
unitSLT.xsl
</xsl:stylesheet>
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="*|@*"/>
<xsl:if test="text()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">
Use Tempale nuitSLT.xsl<br/>
<xsl:apply-templates select="A/B[1]"/>
</xsl:template>
</xsl:stylesheet>
輸出結果
Use Tempale testXML.xsl
<A name="0">
<B name="1">
<C>B1C</C>
<C>B1C2</C>
</B>
<B name="2">
<C>B2C1</C>
<C>B2C2</C>
<D>B2D1</D>
</B>
</A>
這裡要注意的是在testXML.xsl及unitSLT.xsl上都有<xsl:template match="/">的標籤,這樣的情況後面的tag會覆寫前面同名的tag