【问题标题】:How do I read a URL in XSL-T then pass it into a jQuery function?如何在 XSL-T 中读取 URL,然后将其传递给 jQuery 函数?
【发布时间】:2014-10-02 20:03:28
【问题描述】:

对此提前致歉:我是 XSLT 和 jQuery 的新手,很快就会明白。首先我会给出我正在使用的文件的(精简的)内容,然后我会提出我的问题。

test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<contentDefinition>
  <contentDefinitionNode objectId="rssFeedUrl" type="textbox" label="RSS Feed URL" required="yes" translate="false">http://clinicaltrials.gov/ct2/results/rss.xml</contentDefinitionNode>  
</contentDefinition>

test.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" encoding="utf-8" omit-xml-declaration="yes"/>
  <xsl:variable name="rssFeedUrl" select="//contentDefinitionNode[@objectId='rssFeedUrl']/@select" />

  <xsl:template match="/">
    <html>
      <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
        <script src="C:\Users\me\Documents\Visual Studio 2012\Projects\ContentDemo\scripts\jquery.zrssfeed.min.js" type="text/javascript"></script>
        <script type="text/javascript">
          $(document).ready(function () {
          $('#test').rssfeed('$rssFeedUrl', {
          });
          });
        </script>
      </head>
      <body>
        <div id="test"></div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

我想做的是从 test.xml 中读取 rssFeedUrl 并将其传递给 test.xsl 的 rssfeed 函数。在 VS 中运行转换,我不断收到以下消息:“指定的 URL 无效。”我知道 URL 没问题,因为当我将它直接传递到 rssfeed 函数时,我得到了我期望的提要。所以我猜它是从 xml 文件中错误地读取的。

我确实尝试了很长一段时间来自行解决此问题,但甚至无法弄清楚如何显示无效 URL 是什么。我尝试将以下内容插入到元素中,但收到一条错误消息,指出该变量无效:

<script>
  function showIt() {
   alert($rssFeedUrl)
  };
  window.onload=showIt
</script>

我猜这个错误是因为变量超出范围,但我不确定如何修复它。这只是说我试图调试 URL 问题,但不知道如何去做。 (我什至不知道如何使用 xsl 将值打印到屏幕上。)

如果有任何帮助,我将不胜感激。如果这些问题的答案是显而易见的,我再次道歉。我对其中的大部分内容都很陌生。

【问题讨论】:

  • 您是否在运行 XSL 转换时遇到错误?如果是,我无法使用您发布的代码重现该问题 - 请参阅:xsltransform.net/eiZQaEY
  • 感谢您回复我。是的,这就是我得到错误的地方。

标签: javascript jquery xml xslt


【解决方案1】:

我不确定这是否是最好的方法,但在我发布问题后我得到了一些工作。我将函数调用更新为如下所示:

<script type="text/javascript">
    $(document).ready(function () {
    $('#test').rssfeed('<xsl:value-of select="contentDefinition/contentDefinitionNode    [@objectId= 'rssFeedUrl']"/>', {
    limit:<xsl:value-of select="contentDefinition/contentDefinitionNode [@objectId= 'rssItemMaxCount']"/>
    });
    });
</script>

我不确定这是否是最强大或最巧妙的方法,但它的工作方式符合我的期望。

【讨论】:

  • 这里你要明白的是,XSLT 转换不会在 JQuery 执行的同时发生。当您运行 XSLT 转换时,它会获取您的输入 XML,并输出(在本例中)HTML。完成后,可以显示 HTML,此时执行 JQuery。您的解决方案之所以有效,是因为它在 JQuery 运行之前将源 XML 中的值插入到文档中,因此当 JQuery 运行时,它已经拥有要使用的数据值。
  • @GentlePurpleRain:感谢您提供的信息。执行顺序是我不清楚的场景中的许多事情之一。
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多