【问题标题】:Why am I getting a {"location": null} when I try to convert a text/xml into an object?当我尝试将 text/xml 转换为对象时,为什么会得到 {"location": null}?
【发布时间】:2019-04-29 18:42:41
【问题描述】:
我正在尝试了解 DOMParser 的行为,但出了点问题,我不知道如何找到问题所在。这是一个解析包含 XML 文本的字符串的简单代码:
const xml = '<data>Hello World</data>'
const parser = new DOMParser()
const result = parser.parseFromString(xml, 'text/xml')
alert(JSON.stringify(result))
如您所见,我收到了{"location": null}。有人可以向我解释什么是错的,这是什么location?如何按照文档的建议将此字符串解析为对象?
【问题讨论】:
标签:
javascript
xml
domparser
【解决方案1】:
parseFromString() 返回的Document 不是 JSON,如果要对结果进行字符串化,请使用 XMLSerializer。
const xml = '<data>Hello World</data>';
const doc = new DOMParser().parseFromString(xml, 'text/xml');
const docString = new XMLSerializer().serializeToString(doc);
console.log(docString);
【解决方案2】:
parseFromString 返回文档object,其中包含已解析的文本表示,例如:
const xml = '<data>Hello World</data>'
const parser = new DOMParser()
const result = parser.parseFromString(xml, 'text/xml')
console.log(result)
您可以在console.log() 中看到完整的对象。根据您对"location": null 的来源的关注,目前尚不清楚返回文档的 URL 应该是什么。
您可以通过here了解更多关于parseFromString的信息。
【解决方案3】:
请使用以下脚本:-
html-
<p id="demo"></p>
Javascript -
<script>
var parser, xmlDoc;
var text = "<data>Hello`enter code here` World</data>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("data")[0].childNodes[0].nodeValue;
</script>
随心所欲。
【解决方案4】:
来自文档-
DOMParser 接口提供解析 XML 或 HTML 的能力
将源代码从字符串转换为 DOM 文档。
因此,它将 XML 或 HTML 转换为 DOM Document,而不是 JSON。因为这个原因,alert(JSON.stringify(result))的结果无法显示任何结果
const xml = '<data>Hello World</data>'
const parser = new DOMParser()
const result = parser.parseFromString(xml, 'text/xml')
console.log(result);
Output:
#Document
<data>Hello World</data>
对于您的预期结果,请使用XMLSerializer
let s = new XMLSerializer();
console.log(s.serializeToString(result));