编译器在解析的XML文件中省略了DOCTYPE,如何将其包括在最终文件中?

时间:2019-06-08 08:47:15

标签: java xml processing

我正在基于一些任意数据来解析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声明。

0 个答案:

没有答案