如何在xml文档中包含Javascript?

时间:2008-12-21 16:36:58

标签: javascript xml

这个任务似乎很简单:如何在xml文档中包含一个Javascript文件,以便至少Opera和Firefox可以实际解析它并执行代码?

7 个答案:

答案 0 :(得分:21)

添加一个说明XHTML命名空间的脚本,它运行得很好。

<xhtml:script xmlns:xhtml="http://www.w3.org/1999/xhtml"
                src="file.js"
                type="application/javascript"/>

另见 http://www.ibm.com/developerworks/xml/library/x-ffox3/

答案 1 :(得分:10)

如果我找到你,你想要一个XML文档在浏览器中查看时运行javascript吗?

这不是XML标准的一部分,因此在它出现之前不会被支持(我认为这将永远不会被支持,因为XML不是用于显示,而是数据)。如果你在谈论XHTML,那么这是另一回事。

-

编辑:只是为了澄清我的答案。

XML从未打算成为像HTML这样的显示标记,这就是开发XHTML的原因(符合XML标准的HTML)。浏览器已经以某种方式解释XHTML,但XML只是原始数据。

如果您希望XML运行诸如JavaScript之类的附加内容,您将需要考虑使用XSLT将XML转换为XHTML,从而利用浏览器功能。

答案 2 :(得分:7)

<script xmlns="http://www.w3.org/1999/xhtml"><![CDATA[
alert('Hello');
]]></script>

或外部javascript:

<script xmlns="http://www.w3.org/1999/xhtml" src="external.js"></script>

适用于Firefox和Opera。

答案 3 :(得分:2)

我这样做了:

XSLT:

<xsl:value-of select="/label[@id='MyScript']/text()" disable-output-escaping="yes"/>

<强> XML:

<label id="MyScript"><![CDATA[
<script type="text/javascript">
alert("Hello world");
</script>
]]></label>

答案 4 :(得分:0)

将XML和Javascript嵌入到XHTML文档中,然后使用动态HTML的大量且记录良好的功能。

通过推理,因为某些浏览器实现了XML文档的CSS样式,并且它们必须支持XML中嵌入的Javascript的执行,所以它们会比你更快地运行起来并运行得更快,就好像它有这两种想法之间的任何联系。

答案 5 :(得分:0)

与上述类似,但可能会出错,因为<![CDATA[]]>部分不是有效代码。如果您将它放入XSL脚本中,您也可以在这些开始和结束元素之前添加JS注释标记。

我也使用xsl:text元素输出<![CDATA[部分。这部分可能有点作弊,但结果在格式良好的XML中。 xsl:choose块中的示例可能是......

...
<xsl:when test='name()="script"'>
  <script>
    <xsl:for-each select='@*'><xsl:copy-of select='.' /></xsl:for-each>
    <xsl:text disable-output-escaping='yes'>
// &lt;![CDATA[
  </xsl:text>
  <xsl:copy-of select='./text()' />
  <xsl:text disable-output-escaping='yes'>
//]]&gt;
  </xsl:text>
  </script>
</xsl:when>
...

穿过碎片......

  1. 检测<script>元素。
  2. 为输出复制<script>标记。
  3. 请务必使用快速xsl:for-each行保留输出中的代码属性。
  4. 输出未转义的文字:// <![CDATA[//将该行的其余部分呈现为注释,从而防止出现JS错误。
  5. 复制<script>标记的文本内容。注意:您必须预先设置换行符(如上所述或其他方式),以便在它之前的注释掉的行不会与此行相同。显然,如果确实如此,它也会注释掉这一行。保留后面的并不是必需的,但保持两个匹配的CDATA标签的美学。
  6. 输出未转义的文字:// ]]>。这结束了CDATA块,再次,浏览器在读取JS时忽略了CDATA标记。<​​/ li>
  7. 当然,请使用</script>标记关闭该块。
  8. 并且,如果您在xsl:choose块中使用它,请关闭xsl:when
  9. 仅有步骤2,3,5和&amp; 7实际上复制脚本块。剩下的就是忙着工作。

    转换像......这样的块

    ...
    <script type='javascript'>alert('Hello World!');</script>
    ...
    

    然后变成,

    ...
    <script type='javascript'>
    // <![CDATA[
    alert('Hello World!');
    // ]]>
    </script>
    

    通过XML和浏览器有效保存和读取。

答案 6 :(得分:-2)

应该帮助你的函数是eval()函数。此函数将评估您作为Javascript传递给它的任何字符串。

此外,可以在Javascript中解析XML。只需谷歌“javascript xml解析器”。

结合这两个想法,你就可以了。


如果您只是想将javascript放在XML文件中:

&LT; XML&GT; &lt; js script =“1”&gt; 这里有一些javascript; 这里有更多的javascript; &LT; / JS&GT; &lt; js script =“2”&gt; 这里有更多的javascript; jere甚至更多javascript; &LT; / JS&GT; &LT; / XML&GT;