Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用as3删除xml标记_Xml_Regex_Actionscript 3 - Fatal编程技术网

如何使用as3删除xml标记

如何使用as3删除xml标记,xml,regex,actionscript-3,Xml,Regex,Actionscript 3,我已经使用as3导出了data.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(

我已经使用as3导出了data.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> .......
但是for-each循环不起作用。所以我得到了与以前相同的输出,使用val标记。如何解决这个问题? 要删除xml节点,首先需要找到它们:

var sourceXML:XML = ...
var vals:XMLList = sourceXML.Val; //enter actual path to Val nodes here
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()]);
}
for each(var val:XML in vals)
{
    delete (val.parent().children()[val.childIndex()]);
}
若所有节点都有相同的父节点,则可以在局部变量中缓存val.parent().children(),这样会更快

更新

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");
@帕特里克

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");

要删除xml节点,首先需要找到它们:

var sourceXML:XML = ...
var vals:XMLList = sourceXML.Val; //enter actual path to Val nodes here
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()]);
}
for each(var val:XML in vals)
{
    delete (val.parent().children()[val.childIndex()]);
}

如果所有节点都具有相同的父节点,则可以在局部变量中缓存val.parent().children(),这样会更快。

要获取xml节点的内部值,可以(有时)使用:nodeValue

例如:

rootNode.childNodes[a].nodeValue

这将“删除”/不返回xml标记。我在AS2项目中使用过它,我不确定nodeValue在AS3中是否仍然被接受。

好的,我想我已经理解了您的要求,您不想删除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())
}

添加了一个实时示例以演示删除的工作方式:

您也可以在一行中执行此操作,如下所示:

//...

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()]) 

//...

这一定是因为Val标记不是用
xml1选择的。Val
Val
为空。显示xml文件的结构。通过使用bytes.writeObject(myData.children().toString()),xml树类似于0.302770;我最多可以省略DBL标记0.302126 0.301804。。。。。。。。通过使用bytes.writeObject(myData.children().toString())实现0.303737;我最多可以省略DBL标记,然后选择像
var-vals:XMLList=xml1.DBL.Val这样的节点-这将留下空的DBL标记;或者类似于
var-vals:XMLList=xml1.DBL-这将删除DBL标记.bytes.writeObject(myData.children().toString());结果0.3037仅此Val标记,而不是DBL。因此我使用var Val:XMLList=xml1.Val;如果我使用var-vals:XMLList=xml1.DBL.Val;或var vals:xmlsist=xml1.DBL生成的xls将不包含任何数据。@Mithula P Sreedharan我添加了一个工作示例,以查看该示例的效果+1。在xml选择器中,可以执行任何代码,valueOf()获取当前节点。我将自己学习这个技巧:3@patrick感谢您提供这样一个示例。在本指令之后的这个实时示例中,xml1..Val.(删除parent().children()[valueOf().childIndex()])仅跟踪结果数组和dbl,不是val。但是我得到一个没有数值的空白xls。它应该保留那个数值。@Mithula P Sreedharan好的,我想我已经理解了你想要的,我已经更新了答案。@Patrick…现在我根据live example.xml1..val.(parent().replace(valueOf().childIndex,valueOf().text())、bytes.writeObject尝试了这个脚本(xml1.toXMLString());它现在生成0.307602……。我只需要0.307602、0.307602等的xls。虽然您可以在E4X中使用nodeValue()获取选择器中的当前节点,但我不知道如何删除任何内容。好的,让我重新措辞,…它不会删除任何内容,但不会返回xml标记