代码之家  ›  专栏  ›  技术社区  ›  Thufir

获取要为.xml文件执行的javascript

  •  1
  • Thufir  · 技术社区  · 14 年前

    我无法将javascript作为CDATA添加到.xml文件中。有可能吗?我从以下开始:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
     <head>
     <title>XHTML 5 Example</title>
     <script type="application/javascript">
     <![CDATA[
     function loadpdf() {
        document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf";
     }
     ]]>
     </script>
     </head>
     <body onload="loadpdf()">
     <p>This is an example of an
     <abbr title="Extensible HyperText Markup Language">XHTML</abbr> 1.0 Strict document.<br/>
     <img id="validation-icon"
        src="http://www.w3.org/Icons/valid-xhtml10"
        alt="Valid XHTML 1.0 Strict"/><br/>
     <object id="pdf-object"
        type="application/pdf"
        data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
        width="100"
        height="500"/>
     </p>
     </body>
    </html>
    

    example#2 (我更改了宽度值以通过W3C验证)

    这个文件是否可以保存为一个格式良好的.xml文件,如果是,是否应该执行javascript?

    1 回复  |  直到 14 年前
        1
  •  1
  •   zzzzBov    14 年前

    当放置javascript时 script 标记或CSS style 在XHTML中标记,将其放置在 <![CDATA[ ]]> 标签。但是,浏览器会将其作为脚本的一部分进行查看。为了防止脚本的这一部分执行,只需注释掉 <![CDATA[]]> 标签:

    <script type="text/javascript">
    /* <![CDATA[ */
    
    /* ]]> */
    </script>
    

    <style type="text/css">
    /* <![CDATA[ */
    
    /* ]]> */
    </style>
    

    这将允许您在XML中使用特殊字符,而不需要对它们进行编码,并且允许您的脚本正确执行而不出错。此外,如果要解析空白,多行注释是一个不错的选择。

    编辑以添加:

    我相信 object 元素应该有一个结束标记(尽管为空),类似于如何向 脚本 指定外部源时的标记。 到目前为止我还没能证实这一点 .

    对于XHTML,建议的文件扩展名仍然是 .html 但是,您可以使用任何文件扩展名(偶数.pdf)保存该文件。仅仅因为您将其标记为不同的文件扩展名,并不意味着内容对该扩展名必须有效,也不意味着应用程序将能够读取该文件。

    将XHTML另存为 .xml 文件是完全合法的,如果它是正确的XHTML格式,任何可以解析XML的应用程序都可以完全解析它。如果Web浏览器打开一个XML文件,它很可能将内容显示为XML树。如果希望Web浏览器将其作为网页阅读,则应将其另存为网页(.html)

    一句警告 :空白和换行符保留在XML文本节点中。如果您使用XML解析器解析一个页面,并且为了可读性而缩进,那么解析器将在输出中包含换行符和换行符。

    <div>
      <span>
        Some text
        on multiple
        lines
      </span>
      <span>
        Some text
        on multiple
        lines
      </span>
    </div>
    

    跨度的内容基本上是: "\n  Some text\n  on multiple\n  lines\n"

    解决此问题的方法是将结束角括号扩展到文本节点的开头:

    <div
      ><span>Some text on one line</span
      ><span>Some text on one line</span
    ></div>
    

    这是因为忽略了元素中多余的空白。