我已使用as3导出数据.xls文件。
var xml:ArrayCollection;
xml=Labneuron8.lastResult.Response.Terminal as ArrayCollection;
var str:String=xml[0].Value;
var xml1:XML=new XML(str);
myData=new XMLListCollection(xml1.children());
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myData.children().toString());
var f:FileReference = new FileReference();
f.save(bytes,"output.xls");
运行.xls文件时使用值
创建<Val>0.307280</Val>
<Val>0.307280</Val>
<Val>0.307280</Val>
<Val>0.307280</Val>
<Val>0.307280</Val>
<Val>0.307280</Val> .......
现在我必须删除这个Val标签,这不是必需的。
请告诉我删除此标记的脚本。
由于 ............. UPDATE ................
现在我将代码修改为
var xml:ArrayCollection;
xml=Labneuron8.lastResult.Response.Terminal as ArrayCollection;
var str:String=xml[0].Value;
var xml1:XML=new XML(str);
var vals:XMLList = xml1.Val;
for each(var val:XML in vals)
{
delete (val.parent().children()[val.childIndex()]);
Alert.show("hi");
}
myData=new XMLListCollection(xml1.children());
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myData.children().toString());
var f:FileReference = new FileReference();
f.save(bytes,"output.xls");
但是每个循环都没有工作。所以我使用val标签得到了与之前相同的输出。如何解决这个问题? 要删除xml节点,首先需要找到它们:
var sourceXML:XML = ...
var vals:XMLList = sourceXML.Val; //enter actual path to Val nodes here
然后使用父级删除每一个:
for each(var val:XML in vals)
{
delete (val.parent().children()[val.childIndex()]);
}
如果所有节点都有相同的父节点,则可以在局部变量中缓存val.parent()。children(),因此它会更快。
.................. UPDATE ...................
@Patrick
var xml:ArrayCollection;
xml=Labneuron8.lastResult.Response.Terminal as ArrayCollection;
var str:String=xml[0].Value;
var xml1:XML=new XML(str);
xml1..Val.(parent().replace(valueOf().childIndex(),valueOf().text()))
myData=new XMLListCollection(xml1.children());
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myData.children().toString());
var f:FileReference = new FileReference();
f.save(bytes,"output.xls");
...............解决方案....................
var xml6:ArrayCollection;
xml6=Labneuron8.lastResult.Response.Terminal as ArrayCollection;
var str:String=xml6[0].Value;
var xml1:XML=new XML(str);
xml1..Val.(parent().replace(valueOf().childIndex(),valueOf().text()+"\n"))
myData3=new XMLListCollection(xml1.children());
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myData3.children().toString());
var fo:FileReference = new FileReference();
fo.save(bytes,"output.xls");
答案 0 :(得分:4)
要删除xml节点,首先需要找到它们:
var sourceXML:XML = ...
var vals:XMLList = sourceXML.Val; //enter actual path to Val nodes here
然后使用父级删除每一个:
for each(var val:XML in vals)
{
delete (val.parent().children()[val.childIndex()]);
}
如果所有节点都有相同的父节点,则可以在局部变量中缓存val.parent()。children(),因此它会更快。
答案 1 :(得分:3)
好吧我想我已经理解了你想要的东西,你不想删除Val节点,只能用它的内容替换它。
如果您的父节点只有一个子节点,那么您可以使用replace函数执行此操作:
在一行中:
xml1..Val.(parent().replace(valueOf().childIndex(), valueOf().text()))
或循环:
for each (var val:XML in xml1..Val) {
val.parent().replace(val.childIndex(), val.toString())
}
添加了一个实例,以显示删除的工作原理: http://wonderfl.net/c/fHph
您也可以在一行中执行此操作:
//...
var xml1:XML=new XML(str);
xml1.Val.(delete parent().children()[valueOf().childIndex()])
//...
如果您想删除所有Val 节点,只要它们使用..
符号
//...
var xml1:XML=new XML(str);
xml1..Val.(delete parent().children()[valueOf().childIndex()])
//...
答案 2 :(得分:1)
要获取xml-nodes的内部值,您可以(有时)使用:nodeValue。
示例:
rootNode.childNodes[a].nodeValue
这将“删除”/不返回xml-tag。我在AS2项目中使用过它,我不确定在AS3中是否仍然接受nodeValue。