Javascript 如何使用JQuery展平XML树?
我的食品开发应用程序需要将XML树展平。听起来很容易,但我遇到了一个难题。该算法要求所有具有子节点的Javascript 如何使用JQuery展平XML树?,javascript,jquery,xml,Javascript,Jquery,Xml,我的食品开发应用程序需要将XML树展平。听起来很容易,但我遇到了一个难题。该算法要求所有具有子节点的..节点从整体节点分解到顶层..节点 之前: 除了$(this).remove()我尝试过: $xml.find('root').find(this.remove() $xml.find(this.remove() $(此$xml).remove() 但是从XML树中删除这些嵌套节点似乎没有任何效果。 任何关于如何完成上述XML操作的帮助或见解都将不胜感激。谢谢。一个自底向上的递归算法成功地按预期
..
节点从整体节点分解到顶层..
节点
之前:
除了$(this).remove()代码>我尝试过:
$xml.find('root').find(this.remove()代码>
$xml.find(this.remove()代码>
$(此$xml).remove()代码>
但是从XML树中删除这些嵌套节点似乎没有任何效果。
任何关于如何完成上述XML操作的帮助或见解都将不胜感激。谢谢。一个自底向上的递归算法成功地按预期展平了XML树。我最初的错误是试图依靠jQuery隐式迭代和单独遍历来解决这个问题,而没有显式递归。下面是已解决的代码,供您参考,并附有一份工作清单。抱歉打扰你,问题解决了。非常感谢你
$(function(){
var xmlAsStr = "<root><stream><name>Corn Oil</name><quantity>0.3</quantity><disposition>Break out overall</disposition></stream><stream><name>Potatoes</name><quantity>0.5</quantity><disposition>Break out overall</disposition></stream><stream><name>Seasoning</name><quantity>0.1</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Salt</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Maltodextrin</name><quantity>0.03</quantity><disposition>Break out overall</disposition></stream><stream><name>Spice Blend</name><quantity>0.04</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Black Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Garlic</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Red Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream></stream></stream></root>";
var xmlDoc = $.parseXML( xmlAsStr );
var $xml = $( xmlDoc );
var $myResultingXml;
var streamNodeArray = [];
$('root',$xml).children('stream').each(function(){
streamNodeArray.push($(this));
});
var i = 0;
for(i=0;i<streamNodeArray.length;i++)
{
$myResultingXml = flattenXmlRecursive(streamNodeArray[i],$xml);
}
var resultingXmlString = '<root>'+$myResultingXml.find("root").html()+'</root>'
console.log(resultingXmlString );
});
function flattenXmlRecursive(xmlFragment,xmlDoc)
{
var i = 0;
var streamNodeArray = [];
xmlFragment.children('stream').each(function(){
streamNodeArray.push($(this));
});
for(i=0;i<streamNodeArray.length;i++)
{
flattenXmlRecursive(streamNodeArray[i],xmlDoc);
}
if(xmlFragment.children('disposition').text()=='Break out overall')
{
xmlDoc.find(xmlFragment).remove();
xmlDoc.find('root').append(xmlFragment);
}
return xmlDoc;
}
$(函数(){
var xmlAsStr=“玉米油0.3整体调味0.5整体调味0.1整体纯盐0.02整体麦芽糖糊精0.03整体香料调配0.04整体纯黑胡椒0.02整体纯红胡椒0.02整体纯红胡椒0.02整体纯黑胡椒”;
var xmlDoc=$.parseXML(xmlAsStr);
var$xml=$(xmlDoc);
var$myResultingXml;
var streamnoderray=[];
$('root',$xml).children('stream').each(function(){
streamnoderray.push($(this));
});
var i=0;
对于(i=0;i
<root>
<stream>
<name>Corn Oil</name>
<quantity>0.3</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Potatoes</name>
<quantity>0.5</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Seasoning</name>
<quantity>0.1</quantity>
<disposition>Break out overall</disposition>
<isstream>true</isstream>
</stream>
<stream>
<name>Salt</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Maltodextrin</name>
<quantity>0.03</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Spice Blend</name>
<quantity>0.04</quantity>
<disposition>Break out overall</disposition>
<isstream>true</isstream>
</stream>
<stream>
<name>Black Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Garlic</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Red Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
</root>
<root>
<stream>
<name>Corn Oil</name>
<quantity>0.3</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Potatoes</name>
<quantity>0.5</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Seasoning</name>
<quantity>0.1</quantity>
<disposition>Break out overall</disposition>
<isstream>true</isstream>
<stream>
<name>Salt</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Maltodextrin</name>
<quantity>0.03</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Spice Blend</name>
<quantity>0.04</quantity>
<disposition>Break out overall</disposition>
<isstream>true</isstream>
<stream>
<name>Black Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Garlic</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Red Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
</stream>
</stream>
<stream>
<name>Salt</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Maltodextrin</name>
<quantity>0.03</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Spice Blend</name>
<quantity>0.04</quantity>
<disposition>Break out overall</disposition>
<isstream>true</isstream>
<stream>
<name>Black Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Garlic</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Red Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
</stream>
<stream>
<name>Black Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Garlic</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
<stream>
<name>Red Pepper</name>
<quantity>0.02</quantity>
<disposition>Break out overall</disposition>
</stream>
</root>
var xmlAsStr = "<root><stream><name>Corn Oil</name><quantity>0.3</quantity><disposition>Break out overall</disposition></stream><stream><name>Potatoes</name><quantity>0.5</quantity><disposition>Break out overall</disposition></stream><stream><name>Seasoning</name><quantity>0.1</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Salt</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Maltodextrin</name><quantity>0.03</quantity><disposition>Break out overall</disposition></stream><stream><name>Spice Blend</name><quantity>0.04</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Black Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Garlic</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Red Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream></stream></stream></root>";
var xmlDoc = $.parseXML( xmlAsStr );
var $xml = $( xmlDoc );
$('stream',$xml).each(function(){
if($(this).children('disposition').text()=="Break out overall" )
{
var thisHtml = $(this).html();
$(this).remove();
$xml.find('root').append('<stream>'+thisHtml+'</stream>');
}
});
$(function(){
var xmlAsStr = "<root><stream><name>Corn Oil</name><quantity>0.3</quantity><disposition>Break out overall</disposition></stream><stream><name>Potatoes</name><quantity>0.5</quantity><disposition>Break out overall</disposition></stream><stream><name>Seasoning</name><quantity>0.1</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Salt</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Maltodextrin</name><quantity>0.03</quantity><disposition>Break out overall</disposition></stream><stream><name>Spice Blend</name><quantity>0.04</quantity><disposition>Break out overall</disposition><isstream>true</isstream><stream><name>Black Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Garlic</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream><stream><name>Red Pepper</name><quantity>0.02</quantity><disposition>Break out overall</disposition></stream></stream></stream></root>";
var xmlDoc = $.parseXML( xmlAsStr );
var $xml = $( xmlDoc );
var $myResultingXml;
var streamNodeArray = [];
$('root',$xml).children('stream').each(function(){
streamNodeArray.push($(this));
});
var i = 0;
for(i=0;i<streamNodeArray.length;i++)
{
$myResultingXml = flattenXmlRecursive(streamNodeArray[i],$xml);
}
var resultingXmlString = '<root>'+$myResultingXml.find("root").html()+'</root>'
console.log(resultingXmlString );
});
function flattenXmlRecursive(xmlFragment,xmlDoc)
{
var i = 0;
var streamNodeArray = [];
xmlFragment.children('stream').each(function(){
streamNodeArray.push($(this));
});
for(i=0;i<streamNodeArray.length;i++)
{
flattenXmlRecursive(streamNodeArray[i],xmlDoc);
}
if(xmlFragment.children('disposition').text()=='Break out overall')
{
xmlDoc.find(xmlFragment).remove();
xmlDoc.find('root').append(xmlFragment);
}
return xmlDoc;
}