【问题标题】:Unable to convert JSON to XML correctly in javascript无法在 javascript 中正确将 JSON 转换为 XML
【发布时间】:2018-04-07 06:23:18
【问题描述】:

当我加载this 链接时,我得到一个JSON 对象。此对象包含XML 数据。我需要从这些标签中获取数据,遍历类名,我对类名job-entry的数据更感兴趣。

我所做的是,我首先通过json2xml将这个JSON数据转换为xml 功能。这成功地给了我XML。然后我想遍历这个XML的DOM,所以我这样做了:

var xml_string = json2xml(json_string);
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xml_string, "text/xml");

在哪里,json_string 是我从链接加载的那个。然后我解析它。根据this tutorial,我现在正在遍历DOM,我得到了错误:

undefined 不是构造函数(评估 'xml_string.getElementsByClassName("job-entry")');

这就是我遍历 DOM 的方式,而我现在没有错过它。 请注意,我正在使用 casper JS 来加载 JSON。

var jobsURL = "https://de.dpdhl.jobs/search-jobs/results?ActiveFacetID=0&CurrentPage=1&RecordsPerPage=20&Distance=50&ShowRadius=False&SearchResultsModuleName=Search+Results&SearchFiltersModuleName=Search+Filters&SortCriteria=0&SortDirection=1&SearchType=5";

casper.start(jobsURL);
casper.then(function() {

  var json_string = JSON.parse(this.getPageContent());
  var xml_string = json2xml(json_string);
  var parser = new DOMParser();
  var xmlDoc = parser.parseFromString(xml_string, "text/xml");


  console.log(xml_string.getElementsByClassName("job-entry")[0].textContent);

})


casper.run();

【问题讨论】:

  • 您的代码 sn-ps 没有必需的依赖项并且已损坏。用一个工作的 jsfiddle 会更好。
  • @Frederik.L 我正在使用 casper JS,不知道它如何与 JSFiddle 一起使用
  • json2xml(json_string) 内部似乎出了点问题。也许期望您使用 json 字符串而不是对象? JSON.parse(...) 方法将返回一个对象。
  • 仍然没有工作@Frederik.L

标签: javascript xml-parsing casperjs


【解决方案1】:

有一些问题阻碍您实现目标。

数字 1:来自json2xml 的生成 XML 似乎包含错误。

XML Validator 抛出以下错误:

XML Parsing Error: not well-formed
Location: https://codebeautify.org/xmlvalidator
Line Number 20, Column 217:
                                <input type="checkbox" autocomplete="off" id="category-filter-2" class="filter-checkbox" data-facet-type="1" data-id="23821" data-count="15" data-display="Division Customer Solutions & Innovation" data-field-name="" />
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^

第二个:您正试图在xml_string 上运行getElementsByClassName(),而不是xmlDoc

数字 3: getElementsByClassName() 不适用于 XML 元素。这是一个 HTML 函数。

在选择 XML 中的元素时,最好使用 XPath(XML 路径语言)。

由于您的 XML 无效,我可以使用示例 XML 为您的问题提供解决方案。


完整解决方案:

CasperJS 程序:

var jobsURL = 'https://de.dpdhl.jobs/search-jobs/results?ActiveFacetID=0&CurrentPage=1&RecordsPerPage=20&Distance=50&ShowRadius=False&SearchResultsModuleName=Search+Results&SearchFiltersModuleName=Search+Filters&SortCriteria=0&SortDirection=1&SearchType=5';

var casper = require('casper').create();

casper.start(jobsURL);

casper.then(function () {
  // Sample XML
  var xml_string = '<omega><root><tower>716379923</tower><job class="job-entry">Veterinary Physician</job><modern>red</modern><written>individual</written><low>help</low><other>689533135.2394588</other></root><root><tower>234423546</tower><job class="job-entry">Software Developer</job><modern>green</modern><written>multiple</written><low>pain</low><other>99999.11111111111</other></root><root><tower>002229385</tower><job class="job-entry">Car Salesman</job><modern>brown</modern><written>absence</written><low>love</low><other>23408.55728904901</other></root></omega>';
  var parser = new DOMParser();
  var xmlDoc = parser.parseFromString(xml_string, 'text/xml');
  var job_entry = xmlDoc.evaluate('//*[@class="job-entry"]', xmlDoc, null, XPathResult.ANY_TYPE, null);
  var current_job_entry = job_entry.iterateNext();
  
  while (current_job_entry) {
    this.echo(current_job_entry.textContent);
    current_job_entry = job_entry.iterateNext();
  }
});

casper.run();

结果:

Veterinary Physician
Software Developer
Car Salesman

示例 XML:

<omega>
  <root>
    <tower>716379923</tower>
    <job class="job-entry">Veterinary Physician</job>
    <modern>red</modern>
    <written>individual</written>
    <low>help</low>
    <other>689533135.2394588</other>
  </root>
  <root>
    <tower>234423546</tower>
    <job class="job-entry">Software Developer</job>
    <modern>green</modern>
    <written>multiple</written>
    <low>pain</low>
    <other>99999.11111111111</other>
  </root>
  <root>
    <tower>002229385</tower>
    <job class="job-entry">Car Salesman</job>
    <modern>brown</modern>
    <written>absence</written>
    <low>love</low>
    <other>23408.55728904901</other>
  </root>
</omega>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 2010-09-18
    • 1970-01-01
    • 2023-04-03
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多