Java 编译器在解析的XML文件中省略了DOCTYPE,如何将其包含在最终文件中?
我正在基于一些任意数据解析一个XML文件。最后一个XML文件表示为另一个应用程序的保存文件,对此我没有控制权。但是,为了将其正确加载到程序中Java 编译器在解析的XML文件中省略了DOCTYPE,如何将其包含在最终文件中?,java,xml,processing,Java,Xml,Processing,我正在基于一些任意数据解析一个XML文件。最后一个XML文件表示为另一个应用程序的保存文件,对此我没有控制权。但是,为了将其正确加载到程序中 <!DOCTYPE Workspace > 必须包含在文件的顶部。Processing/JavaXML解析器(据我所知,其他XML解析器也是如此)总是忽略这一行 我到处都找了,但是我没有找到解决这个问题的办法。我不熟悉DTD,据我所知,我也不必熟悉,因为Doctype定义超出了我的控制范围 XML xml; ... String da
<!DOCTYPE Workspace >
必须包含在文件的顶部。Processing/JavaXML解析器(据我所知,其他XML解析器也是如此)总是忽略这一行
我到处都找了,但是我没有找到解决这个问题的办法。我不熟悉DTD,据我所知,我也不必熟悉,因为Doctype定义超出了我的控制范围
XML xml;
...
String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Workspace >
xml = parseXML(data);
XML;
...
字符串数据=”
xml=parseXML(数据);
实际结果是一个文件,在该文件中,除了
<!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>
Q灯光控制器升级版
4.12.1
斯蒂芬
通用的
通用RGB
RGB
1.
通用RGB#1
0
0
3.
...
以及生成它的代码:
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");
data=“Q灯光控制器加4.12.1步”;
对于(int x=0;x<48;x++){
对于(int y=0;y<28;y++){
fixtureTracker++;
字符串fixtureData=“GenericGeneric RGBRGB”+fixtureTracker+“Generic RGB”#“+fixtureTracker+”“+universe+”“+address+“3”;
如果(地址>500){
地址=0;
宇宙++;
}否则{
地址+=3;
}
data=data.concat(fixtureData);
}
}
data=data.concat(“”);
xml=parseXML(数据);
saveXML(xml,“xmldata.qxw”);
我知道工作区是在第3行定义的,但是,我仍然需要在生成的文件中包含DOCTYPE声明。请您提供一个声明,好吗?我们无法确切地看到您是如何解析XML的,或者您随后使用它做了什么。伪代码在这里没有完整的示例那么有用。据我所知,您需要DOCTYP只需输入文档元素的名称,而在您使用应用程序创建的XML文件中没有其他详细信息。但这取决于您创建/序列化XML的方式,例如,有多种不同的方式在Java中写出XML。因此,请向我们展示您写出XML文件的Java代码。就其本身而言,DOCTYPE没有内部或外部外部子集只声明文档(“根”)元素的预期名称,不一定成为XML数据解析表示的一部分,这取决于您使用的Java XML API。您可以发布有关如何生成XML文件的代码吗?为什么首先构建包含XML的字符串,然后解析该字符串(就像在
parseXM()
中一样,尽管我们不知道这是什么),然后再次序列化结果?当数据
字符串已经包含XML时,您所需要做的就是将其写入一个文件,例如新的PrintStream(“xmldata.qxw”).println(data)
@imhotapparseXML()
用于将其转换为正确解析的XML对象(缩进和换行),这对未来的可扩展性、可检索性和可读性非常有用。它主要用于检索动态数据,但现在还不是这样。虽然我想如果无法解决我最初的问题,我将不得不应用您的建议。请您提供一个解决方案。我们无法确切了解您是如何解析XML的,或者您当时在做什么使用它。伪代码在这里没有完整的示例那么有用。据我所知,您希望DOCTYPE只包含文档元素的名称,而在您使用应用程序创建的XML文件中没有其他详细信息。但这取决于您创建/序列化XML的方式,例如,有多种不同的方式来编写XM因此,请向我们展示写出XML文件的Java代码。在其自身中,没有内部或外部子集的DOCTYPE只声明文档的预期名称(“根”)元素,并且不一定成为XML数据解析表示的一部分,这取决于您使用的Java XML API。您可以发布有关如何生成XML文件的代码吗?为什么首先构建一个包含XML的字符串,然后解析该字符串(如parseXM()
,尽管我们不知道这是什么功能),然后再次序列化结果?由于您的数据字符串已经包含XML,您只需将其写入一个文件,例如new PrintStream(“xmldata.qxw”)。println(data)
@imhotapparseXML()
用于将其转换为正确解析的XML对象(缩进和换行),这对将来的可扩展性、可检索性和可读性都很有用。它主要用于检索动态数据,但现在还不是这样。虽然我想如果无法解决我最初的问题,我必须应用你的建议。