gpt4 book ai didi

javascript - parse XML() 是否能够解析 URL 而不是 str?

转载 作者:行者123 更新时间:2023-12-03 03:21:15 24 4
gpt4 key购买 nike

请检查此代码,如果我在 $.parseXML 中使用 URL,则 documentElement 将无法工作。

我正在尝试通过这个XML file入表。但如果使用 URL passer,parseXML 将无法工作。

var xml = $.parseXML("<ExtractSummaryDateSet><_date>2017-09-20</_date><_portfolioSummaries><ExtractSummaryDateSetDetail><_portfolioName>52613661</_portfolioName><_detail><Before>0</Before><After>-329</After><ChangeMaturing>0</ChangeMaturing><ChangeNew>-329</ChangeNew></_detail></ExtractSummaryDateSetDetail><ExtractSummaryDateSetDetail><_portfolioName>52613661_LP</_portfolioName><_detail><Before>0</Before><After>-329</After><ChangeMaturing>0</ChangeMaturing><ChangeNew>-329</ChangeNew></_detail></ExtractSummaryDateSetDetail><ExtractSummaryDateSetDetail><_portfolioName>526136|Total</_portfolioName><_detail><Before>0</Before><After>-329</After><ChangeMaturing>0</ChangeMaturing><ChangeNew>-329</ChangeNew></_detail></ExtractSummaryDateSetDetail></_portfolioSummaries></ExtractSummaryDateSet>");
var extractTableData = function(x){
var detailField = [];
detailField.push({});
detailField[0].title = 'Name';
detailField[0].values = [];
for (var i =0; i<x.length; i++){
detailField[0].values.push(x[i].childNodes[0].innerHTML);
var detail = x[i].childNodes[1].childNodes;
for(var j =0 ; j<detail.length; j++){
var detailf = detailField.find(function(arr){
return arr.title === detail[j].localName
});
if(!detailf){
detailField.push({
'values' : [],
'title' : null
});
detailField[detailField.length -1].values.push(detail[j].innerHTML);
detailField[detailField.length -1].title = detail[j].localName;
}
else{
detailf.values.push(detail[j].innerHTML);
}
}
}
return detailField;
};

$(document).ready(function(){
$("#test1").html(function(i, origText){
debugger;
var doc = xml.documentElement;
var table = "<table>";
table+= "<tr><th>"+doc.childNodes[0].localName+"</th><td>"+doc.childNodes[0].innerHTML+"</td></tr>"+
"<tr><th>"+doc.childNodes[1].localName+"</th><td>_</td>";
table+="</table>";

table+="<hr>"
var x = doc.childNodes[1].childNodes;
var tableData = extractTableData(x);
table+="<table>"
for(var i=0; i<tableData.length; i++)
{
table+="<tr><th>"+tableData[i].title+"</th>";
for(var j=0;j<tableData[i].values.length;j++){
table+="<td>"+tableData[i].values[j]+"</td>"
}
table+="</tr>"
}
return table+="</table>";
});
});
table {  
color: #333; /* Lighten up font color */
font-family: Helvetica, Arial, sans-serif; /* Nicer font */
width: 640px;
border-collapse:
collapse; border-spacing: 0;
}

td, th { border: 1px solid #CCC; height: 30px; } /* Make cells a bit taller */

th {
background: #F3F3F3; /* Light grey background */
font-weight: bold; /* Make sure they're bold */
}

td {
background: #FAFAFA; /* Lighter grey background */
text-align: center; /* Center our text */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<body>
<div id="test1">Table</div>
</body>

场景

我在 parseXML 中找到的大多数文档都使用直接导入,例如

var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",


xmlDoc = $.parseXML( xml ),

是否可以这样做

xhttp.open("GET", "URL", true);
var xml = xhttp.responseXML;
xmlDoc = $.parseXML( xml )

我知道responseXML不能与parseXML单独使用,只是一个例子来展示$.parseXML的场景,它是否可以直接从URL调用或者还有其他方法来做到这一点?

最佳答案

由于您已经在使用 jQuery,因此可以使用 $.get(url,callback) 它将针对 URL 执行 Ajax 获取,然后自动检测响应中的 XML,并提供回调的已解析 Document 对象:

$.get("https://myurl/file.xml", function(xml) {
// parsed document named `xml` exists in here
});
// parsed document does not exist out here

您将需要稍微重组您的代码,因为 $.parseXML 是同步的并立即返回其结果,而网络获取是异步的,并将其值提供给将来某个时间调用的回调函数。如果您需要帮助了解如何重构以允许异步 Ajax 获取,请参阅 How do I return the response from an asynchronous call?

关于javascript - parse XML() 是否能够解析 URL 而不是 str?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com