【发布时间】:2011-05-07 00:04:28
【问题描述】:
我对 javascript 相当陌生,我正在尝试为基于 java 的应用程序开发脚本,并使用 javascript 作为其接口来处理/修改内联的 XML 项目信息。不涉及浏览器。
我在 shell 中使用 rhino 来模拟应用程序环境,以便测试和构建解析和修改 XML 所需的 javascript。
目标是能够读取其中包含许多可选处理参数的模板项目 XML,并在不需要该处理功能时删除整个 XML 部分。另外,我需要修改 XML 中的特定值,我可以这样做,如下所示。
这是一个精简的 XML 项目文件 (sample_proj.xml):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PROFILE lastSavedByAppVersion="" type="project" version="1">
<OPTIONS processingmode="concurrent"/>
<ENCODESESSION name="My_session">
<OPTIONS framesizemode="custom"/>
<PLUGINGROUP>
<PLUGIN duration="0" endOffset="0" name="Gamma.plugin" repeats="1" startOffset="0">
<PARAMGROUP event_id="0" keyframe="0">
<PARAM>
<NAME>Cb</NAME>
<VALUE>1.0</VALUE>
</PARAM>
<PARAM>
<NAME>Cr</NAME>
<VALUE>1.0</VALUE>
</PARAM>
<PARAM>
<NAME>Y</NAME>
<VALUE>1.0</VALUE>
</PARAM>
</PARAMGROUP>
</PLUGIN>
<PLUGIN duration="300" endOffset="0" name="Overlay.plugin" repeats="1" startOffset="0">
<PARAMGROUP event_id="0" keyframe="0">
<PARAM>
<NAME>Filename</NAME>
<VALUE></VALUE>
</PARAM>
</PARAMGROUP>
</PLUGIN>
</PLUGINGROUP>
</ENCODESESSION>
<EVENTTIMELINE dropframe="1" fps="24">
<EVENT id="0">
<FRAME>0</FRAME>
<DURATION>0</DURATION>
</EVENT>
</EVENTTIMELINE>
<SOURCE batchtype="cliplist" type="filesource">
<MEDIA name="File" type="video">
<FILENAME/>
</MEDIA>
<MEDIA name="File" type="audio">
<FILENAME/>
</MEDIA>
<clipListModel audioChannelMask="-1" audioFormat="AUTO" singleOutput="false" videoFormat="AUTO">
<clipList/>
</clipListModel>
<TIMECODECONFIGURATION>
<MODE>none</MODE>
</TIMECODECONFIGURATION>
</SOURCE>
</PROFILE>
我可以在 rhino shell 中使用以下 js 代码读取文件,然后尝试解析:
importPackage(java.io)
var project = readFile("sample_proj.xml");
project = project.replace(/Gamma/g, "GammaRGB");
project = project.replace(/\s*<PLUGIN\s+.*Overlay.*[\s\S]*?\/PLUGIN>/img, "");
print(project);
第一个 project.replace 按预期工作,并将用“GammaRGB.plugin”替换“Gamma.plugin”。
然而,第二个正则表达式没有做任何事情,尽管外部 js 正则表达式评估器中的相同正则表达式能够解析和删除整个第二个 <PLUGIN> Overly.plugin </PLUGIN> 部分。我习惯于构建perl正则表达式,所以这里的正则表达式是基于我对js和多行解析的了解。
我希望我可以在纯 javascript 中解析和删除 xml 部分,而无需加载单独的 XML 解析器。我总是知道要传入的 XML,所以首选 XML 的直接文本基解析。
感谢您的帮助,
比尔
【问题讨论】:
-
在 3...2 中不要使用正则表达式...
标签: javascript xml regex parsing