Jquery 如何在ajax响应中重新排序一些XML,以获得更好的报告
我对此有点纠结,并将我的问题重新框定为基本的必需品。我有一个通过ajax从SQL数据库检索XML提要的脚本。我真的无法构造它是如何产生的,它来自一个我无法更改的存储过程。XML中存在一些重复的节点。我需要做的是重新组合,这样我就可以在页面上以不同的数据视图输出数据 以下是数据:Jquery 如何在ajax响应中重新排序一些XML,以获得更好的报告,jquery,ajax,xml,Jquery,Ajax,Xml,我对此有点纠结,并将我的问题重新框定为基本的必需品。我有一个通过ajax从SQL数据库检索XML提要的脚本。我真的无法构造它是如何产生的,它来自一个我无法更改的存储过程。XML中存在一些重复的节点。我需要做的是重新组合,这样我就可以在页面上以不同的数据视图输出数据 以下是数据: <tcm:ListPublishItems xmlns:tcm="http://xxxx"> <tcm:PublicationTarget xmlns:tcm="http://www.tridi
<tcm:ListPublishItems xmlns:tcm="http://xxxx">
<tcm:PublicationTarget xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ID="tcm:0-2-65537" Title="ProdPreview">
<tcm:Page ID="tcm:17-999999-64" Title="testpage" Path="\usweb\wr\aps\jtest" Icon="T64LRE0">
</tcm:Page>
<tcm:Page ID="tcm:17-222222-64" Title="singletest" Path="\usweb\wr\aps\jtest\single" Icon="T64LRE0">
</tcm:Page>
</tcm:PublicationTarget>
<tcm:PublicationTarget xmlns:tcm="http://xxxx" ID="tcm:0-65-65537" Title="TestPreview">
<tcm:Page ID="tcm:17-999999-64" Title="testpage" Path="usweb\wr\aps\jtest" Icon="T64LRE0">
</tcm:Page>
</tcm:PublicationTarget>
在本例中,有两个PublicationTarget节点,一个有两个页面,一个有一个页面。在第二个节点中,页面与第一个节点的页面相同。我需要做的是输出内容,使其以页面为中心,而不是以发布目标为中心
即
页面tcm:17-999999-64-PubTargets-ProdPreview,TestPreview
第17-22222-64页-公共目标-生产许可证
我的代码
function parseITPData(data){
var xmlDoc = $j.parseXML(data.d);
var $xml = $j(xmlDoc);
var items = $xml.find("Page");
var newHtml = ""
var storage = {};
var pTCM,targetType,title,path;
for (var i =0; i<items.length; i++) {
pTCM = items[i].getAttribute("ID");
targetType = items[i].parentNode.getAttribute("Title");
path = items[i].getAttribute("Path");
title = items[i].getAttribute("Title");
if ( pTCM in storage ) {
storage[pTCM].push(targetType);
console.log ("nope");
}
else {
storage[pTCM] = [];
storage[pTCM].push(targetType);
}
}
for (var prop in storage) {
if (storage.hasOwnProperty(prop)){ }
newHtml += "<div style='margin:5px; padding:5px; border-bottom: 1px dotted #9C9C9C; font-size:95%'><div> <b>Page\/Component Published:</b> "+ title +
" </div><div class='itpPath'>Path: "+ path +
"</div><div class='itpTCM'>Item URI: " + "<input type='text' value=" + prop + " readonly>" +
"<input type='button' value='View Page' onclick='window.open(\"/WebUI/item.aspx?tcm=64#id=" + prop + "\")'> "+
"</div><div class='itpPub'> Publication Target: " + storage[prop].join(', ') +
"</div></div>";
}
$j("#results").html(newHtml);
$j("#loadingImage").hide();
}
不幸的是,只报告正确的ID和出版物分组,但只提供路径和标题循环中的最后一项。只需将存储对象稍微深一点,使其看起来像: { PcTmVal_1:{ 目标类型:[ ProdPreview, 测试预览 ], 标题:testpage, 路径:somepath/url/ }, PcTmVal_2:{ 目标类型:[ ProdPreview, 测试预览 ], 标题:另一个标题, 路径:另一个路径/url/ } } 您的第一个循环看起来像: 如果存储器[pTCM]==未定义{ 存储器[pTCM]={ targetType:[], 标题:标题,, 路径:路径 } } 存储[pTCM].targetType.pushtargetType; 然后在第二个循环中替换 +标题+ 与 +存储[prop]。标题+ 而不是存储[prop].join','它将是存储[prop].targetType.join','