Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Javascript 如何将新元素添加到extendscript中的现有XML文件中?_Javascript_Xml_Extendscript - Fatal编程技术网

Javascript 如何将新元素添加到extendscript中的现有XML文件中?

Javascript 如何将新元素添加到extendscript中的现有XML文件中?,javascript,xml,extendscript,Javascript,Xml,Extendscript,我正在编写一个脚本,用After Effects和Extendscript将一些xml数据更新到现有文件中。我正在尝试向现有文件中添加新元素。我有以下代码: function writeXml (xml) { var file = new File(filePath); if (!(xml instanceof XML)) { throw "Bad XML parameter"; } file.encoding =

我正在编写一个脚本,用After Effects和Extendscript将一些xml数据更新到现有文件中。我正在尝试向现有文件中添加新元素。我有以下代码:

 function writeXml (xml) 
 { 
     var file = new File(filePath);
     if (!(xml instanceof XML)) 
     { 
        throw "Bad XML parameter"; 
     } 
     file.encoding = "UTF8"; 
     file.open("e");  
     file.write("\uFEFF"); 
     file.lineFeed = "windows"; 
     file.write(xml.toXMLString()); 
     file.close();
 }
但是这段代码用新元素替换了文档中的所有文本,因此我尝试使用类似于“标记”的xml注释在其下方插入元素。以下是xml:

<Root>
<child name="ChildOne"/>
<child name="ChildTwo"/>
<!---->
</Root>

守则:

function writeXml (xml) 
{ 
     var file = new File(filePath);
     var fileOk = file.open("e"); 
     var strLine, line, docPos;

     if (!(xml instanceof XML)) 
     { 
        throw "Bad XML parameter"; 
     } 

     if (!fileOk)
     {
         throw "Cant open file";
     }

     file.encoding = "UTF8"; 

     while (!file.eof)
     {
         strLine = file.readln();
         docPos= strLine.search("<!---->");
         if (docPos!= -1)
         {
             file.seek(0, 1);
             file.writeln("<!----> \n");
             break;
         }  
     }
     file.close(); 
}
函数writeXml(xml)
{ 
var file=新文件(filePath);
var fileOk=file.open(“e”);
var strLine、line、docPos;
if(!(xml实例of xml))
{ 
抛出“坏XML参数”;
} 
如果(!fileOk)
{
抛出“无法打开文件”;
}
file.encoding=“UTF8”;
而(!file.eof)
{
strLine=file.readln();
docPos=strLine.search(“”);
如果(docPos!=-1)
{
查找(0,1);
file.writeln(“\n”);
打破
}  
}
file.close();
}
此代码写入的elmemnt位置正确,但它会从下一行中删除一些字符,如下所示:

<Root>
<child name="ChildOne" />
<child name="ChildTwo" />
<!---->
<child name="ChildThree">
ot> 

ot>
我的问题是:为什么会发生这种情况?有没有合适的方法来实现这一点?
谢谢。

我找到了一个解决方案,它看起来很难看,但很有效:

function writeXml (xml) 
{ 
     var file = new File(filePath);
     var fileOk = file.open("e"); 
     var strLine, line, docPos, marker;
     marker = "<!---->";

     if (!(xml instanceof XML)) 
     { 
        throw "Bad XML parameter"; 
     } 

     if (!fileOk)
     {
         throw "Cant open file";
     }


     while (!file.eof)
     {
         strLine = file.readln();
         docPos= strLine.search(marker);
         if (docPos!= -1)
         {
             file.seek( (-marker.length - 2), 1);
             file.writeln(xml + "\n" + marker + "\n</Root>");
             break;
         }  
     }
 file.close(); 
}
函数writeXml(xml)
{ 
var file=新文件(filePath);
var fileOk=file.open(“e”);
变量strLine、line、docPos、marker;
标记=”;
if(!(xml实例of xml))
{ 
抛出“坏XML参数”;
} 
如果(!fileOk)
{
抛出“无法打开文件”;
}
而(!file.eof)
{
strLine=file.readln();
docPos=strLine.search(标记);
如果(docPos!=-1)
{
seek((-marker.length-2),1);
file.writeln(xml+“\n”+marker+“\n”);
打破
}  
}
file.close();
}
为什么会这样

您正试图使用
seek
writeln
在现有文件中插入一行。不幸的是,这根本不是文件的工作方式。不能插入单个字节,更不用说插入整行了

有没有合适的方法来实现这一点

是的,有多种方法


例如:打开此文件进行读取,打开新文件进行写入。从该文件中读取每行并将其写入新文件。如果遇到标记,请插入新行。完成后,删除旧文件并重命名新文件。

它看起来比我的回答更好、更安全。谢谢