在这个问题上被困了几个小时之后,我认为现在是时候寻求帮助了。
我有一个XML文件,我需要过滤和分组。我设法使用:Contains
部分对其进行过滤。我还确定了我需要分组的节点(getGroups
函数将这些节点反馈给我)。现在我想创建一个带有过滤值的新XML,并按返回的键分组。
var XMLElement = document.createElement("DataElementsCalc");
jQuery(xml).find("DataElements " + topNodes + filter).each( function() {
var dataSetTemp = this.parentNode;
if(calculation1 != "")
{
var groupKeys = getGroups(dataSetTemp,calculation1);
var tempXML = XMLElement;
jQuery(groupKeys).each(function (key,value) {
var tempValue = 'a' + value.toLowerCase().replace(/\W/g, '');
if(tempXML.getElementsByTagName(tempValue).length > 0)
{
tempXML = tempXML.getElementsByTagName(tempValue);
}
else
{
var Node = document.createElement(tempValue);
tempXML.appendChild(Node);
tempXML = Node;
}
});
var Node = document.createElement("InfoSet");
var x = dataSetTemp.childNodes;
for (i=0; i < x.length; i++)
{
if(x[i].nodeType == 1)
{
var tempElement = document.createElement(x[i].nodeName);
tempElement.innerHTML = x[i].childNodes[0].nodeValue;
Node.appendChild(tempElement);
}
}
tempXML.appendChild(Node);
}
});
如上所述,我已经过滤了XML并拥有getGroups
函数中的groupNames。我还需要为此代码解释一些其他内容:
tempValue
正在构建为a + value.toLowerCase().replace(/\W/g, '');
。这样做是因为我可以将日期记录到groupKeys中。这样节点名称就会得到一个工作名称(我在其他方面收到了错误)。如上所述,未正确检查这些组。首先:tempXML.getElementsByTagName(tempValue).length
返回函数tempXML.getElementsByTagName
不存在的错误。其次:如果我将其更改为document.getElemetsByTagName
,我的XML文件中会有很多相同的节点。
分组效果并非如此。我得到了一个错误,或者我的DataElementsCalc
中有很多相同的节点。
我该如何解决这个问题?如何在特定节点下创建节点(如果在组1下面和组2下面都有组A)?
在不同位置将tempXML
更改为document
(所有getElementsByTagName,同时或不同)。寻找另一种方法来创建一个更容易处理的XML(尚未找到一个)
答案 0 :(得分:0)
正如我自己在问题的评论中提到的那样:
我也没有在源代码中看到任何内容(也许这就是为什么它不起作用?)
我尝试将XMLElement
放入我网页上的现有元素中(如下所示:
var XMLElement = document.createElement("DataElementsCalc");
jQuery('.basicData').append(XMLElement);
其中basicData是现有元素的类。)
现在我获得了我想要的群组上订购的所有元素的列表。
var XMLElement = jQuery("<DataElementsCalc/>");
jQuery('.basicData').append(XMLElement);
jQuery(xml).find("DataElements " + topNodes + filter).each( function()
{
aantalElementsTotal++;
var dataSetTemp = this.parentNode;
if(calculation1 != "")
{
var groupKeys = getGroups(dataSetTemp,calculation1);
var tempXML = XMLElement;
var groupId = '';
jQuery(groupKeys).each(function (key,value) {
var tempValue = 'a' + value.toLowerCase().replace(/\W/g, '');
groupId += 'a' + value.toLowerCase().replace(/\W/g, '');
if(jQuery("#" + groupId).length > 0)
{
tempXML = jQuery("#" + groupId);
}
else
{
var Node = jQuery("<"+tempValue+"/>");
jQuery(Node).attr('id', groupId);
jQuery(tempXML).append(Node);
tempXML = Node;
}
});
var Node = jQuery("<InfoSet/>");
var x = dataSetTemp.childNodes;
for (i=0; i < x.length; i++)
{
if(x[i].nodeType == 1)
{
var tempElement = jQuery("<"+x[i].nodeName+"/>");
jQuery(tempElement).text(x[i].childNodes[0].nodeValue);
jQuery(Node).append(tempElement);
}
}
jQuery(tempXML).append(Node);
}
});