无法在 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>
当我加载 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>