
Код AS3:
function addChapterAt(xml:XML, name:String, pos:int, attrib:Object = null):XML
{
if (!isXMLName(name)) return <error/>;
var insertNode:XML = <{name} {attribsToString(attrib)}/>;
if (!xml.*.length()) return xml.appendChild(insertNode);
pos = pos < 0 ? 0 : pos;
pos = pos > xml.*.length() - 1 ? xml.*.length() : pos;
xml.insertChildBefore(xml.*[pos], insertNode);
return xml;
}
function attribsToString(obj:Object = null):String
{
var ret:String = "";
if (obj === null) return ret;
if (obj is XML)
{
for each(var node:XML in obj.@*)
{
ret += node.name() + "=\"" + node.toXMLString() + "\" ";
}
return ret;
}
for (var p:String in obj)
{
ret += p + "=\"" + obj[p] + "\" ";
}
return ret;
}
var foo:XML = <foo/>;
trace(addChapterAt(foo, "chapter", 100, { bar: "1234" }).toXMLString());
trace(addChapterAt(foo, "chapter", -50, <bar bar="4321"/>).toXMLString());
trace(addChapterAt(foo, "chapter", 1).toXMLString());
trace(addChapterAt(foo, "@", 0, <bar bar="4321"/>).toXMLString());