2

在应该是一个简单的问题上,我已经接近我的智慧了。我正在尝试使用 javascript 将值从一个非常简单的 XML 文档解析并返回到一个非常简单的 HTML 文档。我的问题是我的脚本拒绝这样做。XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<man>
  <name>Nicholas</name>
</man>
<man>
  <name>Peter</name>
</man>
</root>

这完全是为了我自己的教育,因此没有目的的标签。

JavaScript:

<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","dname",false);
xmlhttp.send();
return xmlhttp.responseXML; 
}

xmlDoc =     loadXMLDoc("https://dl.dropboxusercontent.com/u/22818342/Testing/javascript_test4.xml");

x = xmldoc.getElementsByTagName("name");

var content = function()
{
    document.write(x[0].childNodes[0].nodeValue);
};
</script>

请注意,我正在使用我的 Dropbox 公用文件夹来启用代码的 HTTP 获取部分。所有这些文件都位于同一目录中。

(相关)HTML:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="https://dl.dropboxusercontent.com/u/22818342/Testing/javascript_test3.css" rel="stylesheet" type="text/css" />
<body>
<button type="button" onclick="content()">Click Me</button>
<body>

另请注意,当我单击按钮时,表面上触发了该content()功能,但没有任何反应——这不是所有内容都被覆盖的问题。

其他相关信息:--我在谷歌浏览器中测试这个--我从 W3Schools XML-parsing demo 和另一个 StackOverflow 帖子中提取了大部分代码(同样,仅用于学习目的),来自与我有类似问题的用户. 在这两种情况下,代码都运行良好;只有当我尝试运行它时才会出现问题。——我对 Javascript 和 XML DOM 还很陌生,所以我完全有可能在某个地方犯了一个基本错误。

我很感激社区可以提供的任何帮助。

4

3 回答 3

2

对于初学者,您是否尝试过查看它提供的内置调试工具(称为开发人员工具)?有关基本介绍,请参见此处:https ://developers.google.com/chrome-developer-tools/ 。如果您打开链接中提到的开发人员工具,您发布的代码会在进入控制台选项卡的过程中吐出几个错误。

开发人员工具将为您显示的代码存在两个问题:

  • 当您尝试访问您的变量时xmlDoc,您的大小写错误。
  • 在您的 loadXMLDoc 函数中,您的 open 调用正在请求一个名为"dname"(作为字符串)的相对资源,看起来您正在尝试做的实际上是使用变量dname.

因此,更正的版本是:

function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET",dname,false);
xmlhttp.send();
return xmlhttp.responseXML; 
}

xmlDoc =     loadXMLDoc("https://dl.dropboxusercontent.com/u/22818342/Testing/javascript_test4.xml");

x = xmlDoc.getElementsByTagName("name");

var content = function()
{
    document.write(x[0].childNodes[0].nodeValue);
};
于 2013-05-30T02:49:09.493 回答
0

这是将 XML 解析到文档中的一种更不显眼的方法,以及错误回退:

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <title>XML Example</title>
        <meta charset="UTF-8" />
        <script>
            function content(dname) {
                var xhttp = null, xml = null, names = null, html = "", output = document.getElementById("output");
                output.innerHTML = "Loading...";
                if(window.XMLHttpRequest) {
                    xhttp = new XMLHttpRequest();
                } else {
                    xhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                if(!xhttp) {
                    output.innerHTML = "Failed to make the request!";
                } else {
                    xhttp.open("GET", dname, false);
                    xhttp.send();
                    xml = xhttp.responseXML;
                    names = xml.getElementsByTagName("name");
                    for(var i = 0, len = names.length; i < len; i++) {
                        html += names[i].childNodes[0].nodeValue + "<br />";
                    }
                    output.innerHTML = html;
                }
            }
            window.onload = function(){
                document.getElementById("button").onclick = function(){
                    content("https://dl.dropboxusercontent.com/u/22818342/Testing/javascript_test4.xml");
                };
            };
        </script>
    </head>
    <body>
        <button type="button" id="button">Click Me</button>
        <div id="output"></div>
    </body>
</html>
于 2013-05-30T03:03:08.400 回答
0

在 firefox 中使用 ctrl+shift+j 键查看错误,如果您使用 firebug,请转到 firebug 中的“NET”菜单选项卡,您可以看到请求和响应或任何错误。

要了解有关 xml 解析的更多信息,请查看此站点XML DOM

于 2013-05-30T03:52:03.423 回答