bil*_*ggy 0 javascript regex xml parsing
我是javascript的新手,我正在尝试为基于Java的应用程序开发脚本,并使用javascript作为其内联处理/修改XML项目信息的接口.没有涉及浏览器.
我在shell中使用rhino来模仿应用程序环境,以便测试和构建解析和修改XML所需的javascripts.
目标是能够读入模板项目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>
Run Code Online (Sandbox Code Playgroud)
我可以在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);
Run Code Online (Sandbox Code Playgroud)
第一个project.replace按预期工作,将"Gamma.plugin"替换为"GammaRGB.plugin".
然而,第二个正则表达式没有做任何事情,尽管外部js正则表达式评估器中的相同正则表达式能够解析并删除整个第二<PLUGIN> Overly.plugin </PLUGIN>
部分.我习惯于构建perl正则表达式,所以这里的正则表达式是基于我能够学习的关于js和多行解析的东西.
我希望我可以解析并删除纯JavaScript中的xml部分,而无需加载单独的XML解析器.我总是知道将传入的XML,因此首选XML的直接文本库解析.
谢谢你的帮助,
法案
使用Rhino,您可以调用Java代码.(您可能已经知道这一点,因为您的代码显然正在使用java.io包来从文件中读取文本.)
我是否可以建议使用(来自JavaScript)基于Java的DOM解析器(例如java.xml.parsers中提供的)来操作XML,而不是使用Regex?使用正则表达式进行高级XML/HTML操作很难正确执行,特别是如果您的软件需要在以后接受新的未知输入时.
这里有一些Java代码可能会让你开始使用一些等效的JavaScript:
import java.xml.parsers.*;
java.io.File file = new java.io.File("c:\\sample.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document doc = db.parse(file);
Run Code Online (Sandbox Code Playgroud)
(另请参阅解析HTML The Cthulhu Way.)
归档时间: |
|
查看次数: |
4769 次 |
最近记录: |