无法在xsl脚本中返回html元素

时间:2014-08-09 06:41:16

标签: xml xslt

我使用的是IE 9浏览器,下面是我的xml和xsl

当我在浏览器中打开时,它显示错误说 "关键字msxsl:脚本可能不包含h:td。" 请建议。

XML

<?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>

XSL

<?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; 请建议。

1 个答案:

答案 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模板构建节点相比,没有任何方法可以获得。