XMLHTTP 请求未解析 XML 文件

XMLHTTP request not parsing XML file

提问人:jsky 提问时间:1/2/2021 最后编辑:jsky 更新时间:1/3/2021 访问量:222

问:

我试图使用一些 xml 并基于此示例在 xhtml 中提供它,但我得到:

错误:

XML Parsing Error: not well-formed
...f5r.xhtml
Line Number 16, Column 37:
          if (this.readyState == 4 && this.status == 200){
------------------------------------^

f5r.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<folio name="f5r" wordCount="56" width="1067" height="1500">
  <word index="0" x="131" y="202" width="70" height="49">hello</word>
  <word index="1" x="212" y="198" width="62" height="65">world</word>
</folio>

f5r.xhtml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/TR/xhtml1" xml:lang="en" lang="en">
<head>
<?xml-stylesheet href="../../vms.css"?>
<script src="../../public/javascripts/jquery-migrate-1.4.1.min.js"></script>
  <script>
      function loadXMLDoc() {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200){
            myFunction(this);
          }
        };
        xmlhttp.open("GET", "f5r.xml", true);
        xmlhttp.send();
      }

      function myFunction(xml) {
        var x, i, xmlDoc, txt;
        xmlDoc = xml.responseXML;
        txt = "";
        x = xmlDoc.getElementsByTagName("folio");
        for (i = 0; i< x.length; i++) {
          txt += x[i].childNodes[0].nodeValue + "<br>";
        }
        document.getElementById("folio").innerHTML = txt;
      }
</script>

</head>
<body onload="loadXMLDoc()">
  <img class="foliophoto" id="f5r_lg"/>
<div class="folios">
<p class="folio">

  <!-- <xml src="f5r.xml"></xml> -->

</p>
</div>
</body>
</html>

问题可能出在 JQuery 没有在本地加载,但我不确定也不确定为什么 JQ 不能在本地工作,但我过去曾遇到过这个问题。

更新:区分大小写不是问题。“folio”也不起作用。

jquery xml xmlhttprequest xhtml

评论

0赞 Alohci 1/3/2021
x[i].childNodes[0].nodeValue 将是一个空格字符串。你的意思是而不是?getElementsByTagName("word")getElementsByTagName("folio")
0赞 Alohci 1/3/2021
您的 HTML 命名空间是错误的。它应该是,而不是http://www.w3.org/1999/xhtmlhttp://www.w3.org/TR/xhtml1
0赞 jsky 1/3/2021
谢谢。似乎 1 在 NS 中也是无关紧要的。摆脱它并在 CDATA 中保持原样,至少现在可以让 JS 正常工作。但仍然没有导入 XML。&&
0赞 jsky 1/4/2021
从 xml 响应中获取的 XMLDoc 正是我想附加到 div 元素的整个作品集 xml,但 appendChild 不允许添加 HTMLCollection,所以我想它需要像上面一样完成检索和添加文本。但不知道为什么它现在出错了。
0赞 jsky 1/4/2021
将文本添加到 <p> innerHTML。事实证明,添加的中断导致它不添加和错误,因为它也需要转义:。w3.example 中未显示。仍然不确定为什么将 undefined 添加到文本中,因为我现在正在通过 tagname 获取元素,所以它不应该获取 & 它的 null/undefined 元素,而是检查响应 & 确实如此!但正是这些中断导致它没有显示出来。请注意,我只需要使用 CDATA 标记对请求中的 进行转义。所以这个问题和错误是由@kjhuges答案解决的。</br>&#xD;<word><folio>&&

答:

0赞 kjhughes 1/2/2021 #1

在解析的字符数据中,应以实体引用(如 .&&amp;

标准解决方案是将 JavaScript 包装在一个部分中,这样就不会被解释为标记,并使用 JavaScript 注释,以便 JavaScript 忽略分隔符:CDATA&&CDATA

<script>
//<![CDATA[
     JavaScript code here
//]]>
</script>

评论

0赞 jsky 1/2/2021
摆脱了错误,但只是将脚本解释为数据和浏览器将脚本打印到屏幕上。function loadXMLDoc() { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200){ myFunction(this); } }; xmlhttp.open("GET", "f5r.xml", true); xmlhttp.send(); } function myFunction(xml) { var x, i, xmlDoc, txt; xmlDoc = xml.responseXML; txt = ""; x = xmlDoc.getElementsByTagName("FOLIO"); for (i = 0; i< x.length; i++) { txt += x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("folio").innerHTML = txt; }
0赞 jsky 1/2/2021
即 DOM 加载<script>cdata-section</script>
0赞 jsky 1/2/2021
听起来不错。但仍然只是将所有 JS 与 // 打印到屏幕上,不会将数据放入 <p>。顺便说一句,当我尝试使用 jQuery 时,甚至只是 console.log(“hello”),它只是打印到屏幕上而不是控制台。我的 JS 可能有问题......
0赞 jsky 1/2/2021
在转义了 & 符号并封装在 CDATA 标签中后,Safari 给了我一个可能比 Firefox 更有用的错误。这似乎与(这个)[apple.stackexchange.com/questions/361245/...有关,这可能是因为我的文件在外部设备上。(kCFErrorDomainCFNetwork error 1.)" (kCFErrorDomainCFNetwork:1)
0赞 jsky 1/2/2021
实际上它只做了一次,它现在显示相同的 XML HTML 树,但在我希望注入它的段落中没有数据。不知道为什么会出现这个错误,但我可以尝试将其移动到我的主驱动器上。