将xml节点传递给xsl脚本

时间:2014-11-04 15:23:53

标签: javascript xml xslt client-side

我正在尝试将xml节点传递给xsl脚本,但它无法将其识别为xml节点。 因此,在该节点上执行的任何操作都将失败,下面是我的代码示例

调用样式表

<xsl:value-of select="user:getDetail( this)"/>

xsl脚本

function getDetail( node){
var idpl=1;
var idmt=2;
var kian=7

var racine = node.parentNode.parentNode.parentNode;
var nmois = racine.selectSingleNode( "root/pl/user[../../@id = '"+idpl+"' and ../@id = '"+idmt+"' and @id = '"+idmois+"' and @ki = '"+kian+"']");
return  nmois.getAttribute('ord')               
}

请帮忙。


以下是xml和xsl

的示例

XML

<?xml version="1.0" ?>
<?xml-stylesheet href="doc.xsl" type="text/xsl"?>
<books>
<book>
<name>Revolution</name>
<qty value="4">1</qty>
</book>
<book>
<name>Life of a pie</name>
<qty value="4">5</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">
<msxsl:script language="javascript" implements-prefix="user" >
function getNode(node){

return node;

}
</msxsl:script>

<xsl:template match="/">


<html>
<body>
<h2>Book Details</h2>
<table xmlns:h="http://www.w3.org/TR/html4/" border="1px" cellspacing="20px">
<xsl:variable name="rootNode" select="books"/>
<xsl:for-each select="//book">
<tr><td><xsl:value-of select="user:getNode($rootNode)"/>
</td></tr>
</xsl:for-each>
</table>
</body>
</html>

</xsl:template>

</xsl:stylesheet>

我希望输出是每个单元格中的XML而不是我只得到节点文本。 传递XML的方法是使用selectSingleNode和其他JS函数进行perfoem操作 因为节点不是xml所以它失败了。

1 个答案:

答案 0 :(得分:0)

如果要将XML节点复制到结果树,那么使用XSLT则需要分别使用<xsl:copy-of select="$node"/> <xsl:copy-of select="user:getNode($rootNode)"/>xsl:value-of始终使用所选节点的字符串值构造文本节点,它不会将节点本身复制到输出。这对于您拥有的任何节点或结果树片段都是相同的,无论是使用纯XSLT / XPath处理的“普通”片段,还是将其移交给脚本然后返回XSLT / XPath。