我使用的是IE 9浏览器,下面是我的xml和xsl
当我在浏览器中打开时,它显示错误说 "关键字msxsl:脚本可能不包含h:td。" 请建议。
<?xml version="1.0" ?>
<?xml-stylesheet href="doc.xsl" type="text/xsl"?>
<books>
<book>
<name>book1</name>
<qty>2</qty>
</book>
<book>
<name>book2</name>
<qty>2</qty>
</book>
<book>
<name>book3</name>
<qty>2</qty>
</book>
</books>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:user="com.nitish"
xmlns:h="http://www.w3.org/TR/html4/">
<msxsl:script language="javascript" implements-prefix="user" >
function row(){
return (<h:td>hello</h:td>);
}
</msxsl:script>
<xsl:template match="/">
<html>
<body>
<h2>Book Details</h2>
<h:table xmlns:h="http://www.w3.org/TR/html4/" border="1">
<xsl:for-each select="//book">
<h:tr><h:td><xsl:value-of select="name"/>
<xsl:value-of select="user:row()"/></h:td></h:tr>
</xsl:for-each>
</h:table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
当我在浏览器中打开时,它显示错误说 &#34;关键字msxsl:脚本可能不包含h:td。&#34; 请建议。
答案 0 :(得分:0)
如果您需要一个可调用的组件来返回一个节点,那么您只需编写一个模板并调用它即可。
<xsl:template name="row">
<tr>
<td>hello</td>
</tr>
</xsl:template>
然后你可以致电<xsl:call-template name="row"/>
。这是纯XSLT 1.0,不依赖于专有扩展来使用Javascript。
如果您真的想在IE中使用JScript for MSXML构建节点,那么我认为您需要
<msxsl:script language="javascript" implements-prefix="user" ><![CDATA[
function row(){
var doc = new ActiveXObject('Msxml2.DOMDocument.3.0');
doc.loadXML('<tr><td>hello</td></tr>');
return doc.documentElement;
}
]]></msxsl:script>
然后使用例如XSLT中的<xsl:copy-of select="user:row()"/>
。未经测试,在IE的更高版本中可能需要Msxml2.DOMDocument.6.0
。在我看来,与简单地使用XSLT模板构建节点相比,没有任何方法可以获得。