我正在基于一些任意数据来解析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");
我知道工作空间是在第三行中定义的,但是,仍然需要在生成的文件中包含DOCTYPE声明。