我在XSL样式表中有一个javascript。在javascript中,我有一个函数getName(node)。 我如何在我的xsl中调用它? 我之前使用过xsl:eval = getname(this)。它一直工作到IE8。 Hasnt从IE9开始工作。 我可以使用xsl:value-of-select吗?或任何其他提示使其工作? 提前谢谢。
<xsl:script language='JavaScript'><![CDATA[
var sSobeysRegion = "Sobeys West";
var sReceiverID = "SOBEYSCANADA:ZZ";
var ATLANTIC = "Sobeys Atlantic";
var WEST = "Sobeys West";
var QUEBEC = "Sobeys Quebec";
var ONTARIO = "Sobeys Ontario";
var option1 = ATLANTIC ;
var option2 = WEST ;
var option3 = QUEBEC ;
var option4 = ONTARIO ;
function getRegion(sVar)
{
if (sVar == sSobeysRegion) {
return true;
}
else {
return false;
}
}
function setReceiverID(sTmp)
{
if (sTmp == "Sobeys Atlantic") {
sReceiverID = "SOBNBTATLTST:ZZ";
option1 = ATLANTIC;
option2 = WEST;
option3 = ONTARIO;
option4 = QUEBEC;
}
else if (sTmp == "Sobeys West") {
sReceiverID = "SOBNBTWSTTST:ZZ";
option2 = ATLANTIC;
option1 = WEST;
option3 = QUEBEC;
option4 = ONTARIO;
}
else if (sTmp == "Sobeys Quebec") {
sReceiverID = "SOBNBTQUETST:ZZ";
option2 = ATLANTIC;
option3 = WEST;
option4 = ONTARIO;
option1 = QUEBEC;
}
else if (sTmp == "Sobeys Ontario") {
sReceiverID = "SOBNBTONTTST:ZZ";
option2 = ATLANTIC;
option3 = WEST;
option1 = ONTARIO;
option4 = QUEBEC;
}
}
function getRegionValue(Node)
{
var sRegion = "TESTID";
var xmldoc = Node.ownerDocument;
var root = xmldoc.documentElement;
sRegion = root.getAttribute("Region");
sSobeysRegion = sRegion;
setReceiverID(sSobeysRegion)
// return sRegion;
return "";
}
var iLineItemCount = 0;
function addLineItemCount()
{
++iLineItemCount;
return iLineItemCount;
}
function getLineItemCount()
{
return iLineItemCount;
}
function getEditNodeName(Node)
{
var sTmp = "";
// var xmldoc = Node.ownerDocument;
// var root = xmldoc.documentElement;
// var attribute = null;
// sTmp = Node.nodeName;
// attribute = xmldoc .createAttribute("EditItemCount");
// Node.setAttributeNode(attribute);
// Node.setAttribute("EditItemCount", getEditItemCount());
//attribute = Node.getAttributeNode();
// sTmp += ", " + Node.getAttribute("EditItemCount");
// sTmp += ", document.form." + Node.nodeName + Node.getAttribute("EditItemCount") + ".value";
// sTmp = "this";
sTmp = "this, " + getIndex(Node);
return sTmp;
}
function getName(Node)
{
var sTmp = "";
sTmp = Node.nodeName;
return sTmp;
}
function getValue(Node)
{
var sTmp = "";
if (Node.childnodes(0)!= null) {
sTmp = Node.childnodes(0).nodeValue;
}
return sTmp;
}
function setValue(Node, sValue)
{
}
function TransformDate(Node)
{
var sTmp = 0;
var sDate = "";
sTmp = Node.childnodes(0).nodeValue;
sDate = sTmp.substring(4,6) + "/" + sTmp.substring(6,8) + "/" + sTmp.substring(0,4);
return sDate;
}
var iLineCount = 0;
function getLineCount(Node)
{
++iLineCount;
return iLineCount;
}
var iEditItemCount = 0;
function getEditItemCount(Node)
{
++iEditItemCount;
return iEditItemCount;
}
function getIndex(node)
{
var iCount = 0;
var previousNode = null;
while(node.parentNode != null){
previousNode = node.previousSibling;
while(previousNode != null){
if ((previousNode.nodeName != "#document") && (previousNode.nodeName != "xml")
&& (previousNode.nodeName != "xml-stylesheet")) {
iCount += countChildren(previousNode);
// sValue += previousNode.nodeName + "%";
++iCount;
}
previousNode = previousNode.previousSibling;
}
node = node.parentNode;
if (node.nodeName != "#document") {
++iCount;
// sValue += node.nodeName + "*"
}
}
return(iCount);
}
function countChildren(node)
{
var iCount = 0;
var iTotal = 0;
var intNode = 0;
iCount = node.childNodes.length;
if (iCount > 0) {
for (intNode = 0; intNode < iCount; intNode++) {
if (node.childNodes(intNode).nodeName != "#text") {
iTotal += countChildren(node.childNodes(intNode));
// sValue += node.childNodes(intNode).nodeName + "&";
++iTotal;
}
}
}
return(iTotal);
}
function showNext()
{
}
]]></xsl:script>
这是xsl:script块中存在的javascript。 对此功能的调用如下。
`enter code here`
<xsl:template match="SAC_SAC_01_248">
<xsl:element name='select'>
<xsl:attribute name='class'>select</xsl:attribute>
<xsl:attribute name='name'><xsl:value-of-select = "getName(this)">/></xsl:attribute>
<xsl:attribute name='defaultvalue'><xsl:value-of-select = "getValue(this)"/></xsl:attribute>
<xsl:attribute name='style'>color: black; font-size: 10px;font-weight: normal;font-family: Verdana, Arial, Helvetica, sans-serif</xsl:attribute>
<xsl:attribute name='onchange'>onNewCodeChange(<xsl:value-of-select = "getEditNodeName(this)"/>, 2)</xsl:attribute>
<xsl:element name='Option'>
<xsl:attribute name='value'></xsl:attribute>
</xsl:element>
<xsl:element name='Option'>
<xsl:attribute name='value'>A</xsl:attribute>
A
</xsl:element>
<xsl:element name='Option'>
<xsl:attribute name='value'>C</xsl:attribute>
C
</xsl:element>
</xsl:element>
</xsl:template>
答案 0 :(得分:1)
这就是我在XSLT 1.0中调用JScript方法的方法:
将以下两个名称空间(xmlns)添加到样式表的顶部:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:jscript="http://www.transvision.dk"
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:jscript="http://www.url.com"
exclude-result-prefixes="msxsl jscript">
使用 jscript 命名空间在代码中编写javascript代码:
<msxsl:script language="JScript" implements-prefix="jscript">
function getRegion(sVar){
...
}
</msxsl:script>
调用javascript方法时,请记住使用 jscript 命名空间:
<xsl:value-of select="jscript:getRegion(string($sVar))"/>