Javascript 导入数据后如何在After Effects中访问XML元素?
今天早些时候,我使用JSon发布了类似的内容,但放弃了,我转而使用XML。有人能告诉我我做错了什么吗?我有一个xml文件,正在通过After Effects中的脚本进行解析,我不知道如何访问xml元素 我的XML文件是:Javascript 导入数据后如何在After Effects中访问XML元素?,javascript,xml,after-effects,Javascript,Xml,After Effects,今天早些时候,我使用JSon发布了类似的内容,但放弃了,我转而使用XML。有人能告诉我我做错了什么吗?我有一个xml文件,正在通过After Effects中的脚本进行解析,我不知道如何访问xml元素 我的XML文件是: <?xml version="1.0" encoding="utf-8"?> <root> <f> <accelX>0.4682</accelX>
<?xml version="1.0" encoding="utf-8"?>
<root>
<f>
<accelX>0.4682</accelX>
<accelY>-0.0352</accelY>
<accelZ>-0.9247</accelZ>
<gyroX>0.0555</gyroX>
<gyroY>0.004</gyroY>
<gyroZ>-0.0684</gyroZ>
</f>
<f>
<accelX>-0.4682</accelX>
<accelY>-0.0219</accelY>
<accelZ>-0.9186</accelZ>
<gyroX>0.0049</gyroX>
<gyroY>0.0851</gyroY>
<gyroZ>-0.046</gyroZ>
</f>
</root>
我写错了吗?After Effects将创建一个值为“0”的关键帧,但不会完成for…循环,也不会完成脚本。
我对这些元素的访问是否有误?我认为核心问题是
data.f[0].accelX
的值是一个字符串,而不是一个数字(例如“4.6”
而不是4.6
),因此setValueAtTime
以一个非数字的值结束,这不起作用1
解决方案是在其上使用parseFloat
:
var-temp=parseFloat(data.f[0].accelX);
有了这些,再加上laayers的打字错误,我就可以让它工作了。我想。我不知道它应该做什么,但我最终得到了一个新的空层,它在x轴上有20个旋转关键帧,感觉像是在进步
我认为在养育子女和命名方面可能仍然存在一些问题,但我认为上述问题会让你摆脱困境,进入下一个问题
干杯
1我认为它可能会使脚本崩溃并在某个地方发出错误消息,但我真的不记得AE脚本是如何工作的,而且我没有安装ESTK(显然),因此我无法打开脚本编辑器。我想你想要的是
f[I]
而不是f[0]
f[0]
每次循环都会为您提供相同的项(第一项)。是的,这是真的,我确实在某个时候有过,我想我在尝试排除故障时更改了它;不过,在这一点上,我很乐意连续得到f[0]20次。。。不管怎样,它都不起作用。我还没有仔细看你的代码——几分钟后我到电脑前会看的。现在看。抱歉延误。laayers
有一个额外的“a”?是的!!谢谢你花时间来研究这个,它正在工作,至少在目前的状态下-我不熟悉parseFloat,所以我只能想象我会用它绕圈子跑多久。再次感谢你。
var file = new File;
var check = 0;
var mainWindow = new Window("palette", "File Reader", undefined);
mainWindow.orientatizzaaq1on = "column";
var groupOne = mainWindow.add("group", undefined, "groupOne");
groupOne.orientation = "row";
var fileLocBox = groupOne.add("edittext", undefined, "Selected File Location");
fileLocBox.size = [150, 20];
var getFileButton = groupOne.add("button", undefined, "File...");
getFileButton.helpTip = "Select a .json file to change the comp";
var groupTwo = mainWindow.add("group", undefined, "groupTwo");
groupTwo.orientation = "row";
var applyButton = groupTwo.add("button", undefined, "Apply");
mainWindow.center();
mainWindow.show();
getFileButton.onClick = function() {
file = file.openDlg("Open a file", "Acceptable Files:*.xml");
fileLocBox.text = file.fsName;
check = 1;
}
applyButton.onClick = function() {
if(check == 0) {
alert("Please select a file");
return false;
} else {
//app.beginUndoGroup("Comp Changes");
var fileExtension = fileLocBox.text;
var fileData;
if(fileExtension.substring(fileExtension.length-4, fileExtension.length) == "json") {
fileData = readJson();
} else {
switch(fileExtension.substring(fileExtension.length-3, fileExtension.length)) {
case "txt":
//fileData = readTxt();
break;
case "xml":
fileData = readXml();
break;
}
}
changeComp(fileData);
}
alert("done");
}
function readXml() {
file.open("r");
var xmlString = file.read();
var myXml = new XML(xmlString);
file.close();
return myXml;
}
function changeComp(data) {
var nullz = app.project.activeItem.layers.addNull();
nullz.threeDLayer = true;
nullz.name = "parent to me";
for (i = 0; i < 20; i++) {
var temp = data.f[0].accelX;
var t =i/25;
nullz.xRotation.setValueAtTime(t, temp);
}
}
var temp = data.f[0].accelX;