我正在根据一些任意数据解析 XML 文件。最终的 XML 文件表示为另一个应用程序的保存文件,我无法控制它。但是,为了将其正确加载到程序中,
<!DOCTYPE Workspace >
必须包含在文件的顶部。Processing/Java XML 解析器(并且就我能够计算出所有其他 XML 解析器而言)总是忽略这一行。
我到处搜索,但找不到任何解决方法。我不熟悉 DTD,据我所知我也不需要,因为 Doctype 定义超出了我的控制范围。
XML xml;
...
String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Workspace >
xml = parseXML(data);
实际结果是一个文件,其中的每一段 XML 都被正确解析,除了
<!DOCTYPE Workspace >
宣言。
有什么解决方法吗?
编辑: 根据要求,我正在生成的 XML 文件中的示例:
<?xml version="1.0" encoding="UTF-8"?>
<!--Notice how it doesn't include <!DOCTYPE Workspace > here -->
<Workspace xmlns="http://www.qlcplus.org/workspace" CurrentWindow="FixtureManager">
<Creator>
<Name>Q Light Controller Plus</Name>
<Version>4.12.1</Version>
<Author>steph</Author>
</Creator>
<Engine>
<InputOutputMap>
<Universe ID="0" Name="Universe 0">
<Input Line="0" Plugin="MIDI"/>
<Output Line="6" Plugin="ArtNet"/>
<PluginParameters outputIP="192.168.0.24"/>
</Universe>
</InputOutputMap>
<Fixture>
<Manufacturer>Generic</Manufacturer>
<Model>Generic RGB</Model>
<Mode>RGB</Mode>
<ID>1</ID>
<Name>Generic RGB #1</Name>
<Universe>0</Universe>
<Address>0</Address>
<Channels>3</Channels>
</Fixture>
...
</Engine>
</Workspace>
以及生成它的代码:
data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Workspace ><Workspace xmlns=\"http://www.qlcplus.org/workspace\" CurrentWindow=\"FixtureManager\"><Creator><Name>Q Light Controller Plus</Name><Version>4.12.1</Version><Author>steph</Author></Creator><Engine><InputOutputMap><Universe Name=\"Universe 0\" ID=\"0\"><Input Plugin=\"MIDI\" Line=\"0\"/><Output Plugin=\"ArtNet\" Line=\"6\"/><PluginParameters outputIP=\"192.168.0.24\"/></Universe></InputOutputMap>";
for(int x = 0; x < 48; x++){
for(int y = 0; y < 28; y ++){
fixtureTracker++;
String fixtureData = "<Fixture><Manufacturer>Generic</Manufacturer><Model>Generic RGB</Model><Mode>RGB</Mode><ID>" + fixtureTracker + "</ID><Name>Generic RGB #" + fixtureTracker + "</Name><Universe>" + universe + "</Universe><Address>" + address + "</Address><Channels>3</Channels></Fixture>";
if(address > 500){
address = 0;
universe++;
}else{
address += 3;
}
data = data.concat(fixtureData);
}
}
data = data.concat("</Engine></Workspace>");
xml = parseXML(data);
saveXML(xml, "xmldata.qxw");
我知道工作区是在第 3 行定义的,但是,我仍然需要在生成的文件中包含 DOCTYPE 声明。