xsl: call-template в функции JavaScript? - PullRequest
1 голос
/ 13 апреля 2011

Я действительно новичок в кодировании, извините, если это звучит глупо или глупо.У нас есть новый проект, чтобы придумать новую веб-страницу.У меня есть несколько условий 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 голосов
/ 14 апреля 2011

В скрипте есть несколько проблем, которые мешают правильному выполнению оператора if.

  1. Логическое значение и оператор в JavaScript: &&, а не and. Обратите внимание, что если вы используете &, это будет побитовое значение.
  2. Тесты не должны быть строкой. Из-за приведения типа JavaScript строка будет преобразована в логическое значение. null или пустая строка '' будет оценивать false, все остальные строки будут оценивать true. В настоящее время у вас есть

    if("test1 and test2")
    

    Это должно быть

    if(test1 && test2)
    

Пока ваш обновленный скрипт будет

<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);
  }

Если вы выбрали узел по идентификатору, то вы могли бы использовать xmlDoc.getElementById вместо итерации по всем узлам типа и проверки атрибутов.

Для выбора текстового значения узла xml большинство браузеров используют свойство textContent, хотя Internet Explorer использует text. Линия

  targetProduct.textContent || targetProduct.text

возвращает textContent, если оно присутствует и не равно нулю, или значение text.

0 голосов
/ 13 апреля 2011

Вы не уверены в модели обработки. Элемент сценария сгенерирован XSLT? Если это так, шаблон вызова, вероятно, будет вызван во время создания сценария. Он не будет вызываться во время выполнения скрипта. Код Javascript не будет магически выполнять инструкции XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...