【问题标题】: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));
          

          【讨论】:

            猜你喜欢
            • 2017-03-15
            • 1970-01-01
            • 1970-01-01
            • 2020-10-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多