无法在 javascript 中将 JSON 正确转换为 XML

Unable to convert JSON to XML correctly in javascript

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

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

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

其中,json_string 是我从link 加载的那个。然后我解析它。根据 this tutorial,我现在正在遍历 DOM,但出现错误:

undefined is not a constructor (evaluating '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();

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

编号 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="" />
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^

编号 2: 您正在尝试 运行 getElementsByClassName() xml_string,而不是 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>