Почему я получаю {"location": null}, когда пытаюсь преобразовать текст / xml в объект? - PullRequest
2 голосов
/ 29 апреля 2019

Я пытаюсь понять поведение 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? Как я могу разобрать эту строку в объект, как предполагает документация?

Ответы [ 4 ]

1 голос
/ 29 апреля 2019

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 возвращаемого документа.

enter image description here

Подробнее о parseFromString из можно узнать здесь .

1 голос
/ 29 апреля 2019

Document, возвращаемое из parseFromString(), не является 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);
0 голосов
/ 29 апреля 2019

Из документации -

Интерфейс DOMParser предоставляет возможность разбора XML или HTML исходный код из строки в документ DOM.

Итак, он конвертирует XML или HTML в DOM Документ , а не 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));
0 голосов
/ 29 апреля 2019

Пожалуйста, используйте следующий скрипт: - 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>

Работает как хочешь.

...