gpt4 book ai didi

javascript - 在 javascript 中解析 XML - 没有浏览器 - 没有 XML 解析器

转载 作者:行者123 更新时间:2023-11-28 12:49:00 25 4
gpt4 key购买 nike

我对 javascript 相当陌生,我正在尝试为基于 java 的应用程序开发脚本,并使用 javascript 作为其接口(interface)来内联处理/修改 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*&lt;PLUGIN\s+.*Overlay.*[\s\S]*?\/PLUGIN&gt;/img, "");
print(project);

第一个project.replace按预期工作,并将用“GammaRGB.plugin”替换“Gamma.plugin”。

然而,第二个正则表达式不执行任何操作,尽管外部 js 正则表达式求值器中的相同正则表达式能够解析并删除整个第二个 <PLUGIN> Overly.plugin </PLUGIN>部分。我习惯了构建perl正则表达式,所以这里的正则表达式是基于我已经了解到的js和多行解析的知识。

我希望能够在纯 JavaScript 中解析和删除 xml 部分,而无需加载单独的 XML 解析器。我总是知道将传入的 XML,因此首选 XML 的直接文本基础解析。

感谢您的帮助,

比尔

最佳答案

使用Rhino,您可以调用Java 代码。 (您可能已经知道这一点,因为您的代码显然使用 java.io 包从文件中读取文本。)

我可以建议使用(来自 JavaScript)基于 Java 的 DOM 解析器(例如 java.xml.parsers 中可用的)来操作 XML,而不是使用正则表达式吗?使用正则表达式进行高级 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);

(另请参阅 Parsing HTML The Cthulhu Way 。)

关于javascript - 在 javascript 中解析 XML - 没有浏览器 - 没有 XML 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com