xsl:javascript函数中的call-template?

时间:2011-04-13 14:28:14

标签: javascript xslt

我真的很擅长编码,对不起,如果这些听起来很愚蠢或愚蠢。我们有一个新项目来提出一个新的网页。我有一个多条件if语句,并且如果满足条件,则想调用xsl模板。这就是我现在的方式,它根本不起作用。

<script>
function getSelectedValue()
{
if("document.getElementById('type').value==1 and document.getElementById('cablegroup5').value==9"+
"document.getElementById('cablegroup3').value==22 and document.getElementById('cablelength').value==11")
{
<xsl:call-template name="PN">
<xsl:with-param name="Cable">ABC111-06</xsl:with-param>
</xsl:call-template>
}
}
</script>

我知道第一部分有效,我已经用警告信息对其进行了测试,并且工作得很好。这些都是通过多个下拉菜单旁边的按钮(onclick)激活的。有没有办法让这个工作?任何帮助将非常感激。感谢。

2 个答案:

答案 0 :(得分:0)

您对处理模型感到困惑。脚本元素是由XSLT生成的吗?如果是这样,则可能在生成脚本时调用call-template。在执行脚本时不会调用它。 Javascript代码不会神奇地执行XSLT指令。

答案 1 :(得分:0)

脚本中存在一些问题会阻止if语句正确执行。

  1. JavaScript中的布尔值和运算符为&&而不是and。请注意,如果您使用&,这将是一个按位和。
  2. 测试不应该是字符串。由于JavaScript类型coersion它将字符串转换为布尔值。 null或空字符串''将评估false,所有其他字符串将评估true。目前你有

    if("test1 and test2")
    

    这应该是

    if(test1 && test2)
    
  3. 到目前为止,您更新的脚本将是

    <script>
      function getSelectedValue()
      {
      if(document.getElementById('type').value==1 && 
        document.getElementById('cablegroup5').value==9 &&
        document.getElementById('cablegroup3').value==22 &&  
        document.getElementById('cablelength').value == 11)
        {
          // Process Xml
        }
      }
    </script>
    

    您需要使用浏览器xml解析器来处理您的xml。我假设您有一个xml字符串,如果您有一个文档对象,那么您将不得不稍微更改以下内容,这是来自w3schools

      var xmlString = "<Products>" +
                        "<Product partnumber='foo'>This is product 1</Product>" +
                        "<Product partnumber='bar'>This is product 2</Product>" +
                      "</Products>";
      // Load into an XML document
      var myDoc;
      if (window.DOMParser)
      {
        var parser=new DOMParser();
        myDoc=parser.parseFromString(xmlString,"text/xml");
      }
      else // Internet Explorer
      {
        myDoc=new ActiveXObject("Microsoft.XMLDOM");
        myDoc.async="false";
        myDoc.loadXML(xmlString);
      }
    
      // Get all product nodes
      var products = myDoc.getElementsByTagName('Product');
      var i, targetProduct, partNumber;
    
      for(i = 0; i < products.length; i += 1){
        // Get the partnumber attribute
        partnumber = products[i].attributes.getNamedItem('partnumber');
    
        // Ensure that the partnumber exists and its value is what is wanted
        if(partnumber && partnumber.value == 'foo'){
          targetProduct = products[i];
          // Exit for
          break;
        }
      }
    
      // If the product has been found alert its value.
      if(targetProduct != null){
        alert(targetProduct.textContent || targetProduct.text);
      }
    

    如果按ID选择了节点,则可以使用xmlDoc.getElementById而不是遍历类型的所有节点并检查属性。

    要选择xml节点的文本值,大多数浏览器都使用属性textContent,尽管Internet Explorer使用text。这条线

      targetProduct.textContent || targetProduct.text
    

    如果它存在且不为空,则返回textContent,或text的值。