ОК, я придумала решение.Это не совсем красиво, я бы даже поспорил, что некоторые скажут, что это «хак».Все это в стороне, это работает, и XML действителен, когда я сделан.Вот простая небольшая тестовая программа, которую я написал сегодня днем:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
public class fTesting {
/**
* @param args
*/
public static void main(String[] args)
{
try
{
int c = 0;
File in = new File("c:/users/tom/desktop/filechangetest/test.xml");
File out = new File("c:/users/tom/desktop/filechangetest/test2.xml");
//array used to test when multiple ICN in XML, only one shown here
String[] icns = new String[] {"ICN-XYZ897-YYY-12345678-P-AB123-00034-A-001-01"};
Scanner read = new Scanner(in);
BufferedWriter writer = new BufferedWriter(new FileWriter(out));
while(read.hasNextLine())
{
c++;
if(c == 1)
{
writer.append(read.nextLine());
}
else if(c == 2)
{
writer.append("<!DOCTYPE dmodule[\n");
for(int i = 0; i < icns.length; i++)
{
writer.append("<!ENTITY "+icns[i]+" " +
"SYSTEM '"+ icns[i] +".cgm' NDATA cgm>");
}
writer.append("<!NOTATION cgm SYSTEM 'cgm'>"+
"<!ENTITY % ISOEntities PUBLIC 'ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML' " +
"'http://www.s1000d.org/S1000D_4-0-1/ent/xml/ISOEntities'>\n%ISOEntities;]>\n");
}
else
writer.append(read.nextLine());
}
read.close();
writer.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
При запуске со следующим XML (test.xml)
<?xml version="1.0" encoding="utf-8"?>
<dmodule xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.s1000d.org/S1000D_4-0-1/xml_schema_flat/ipd.xsd">
<child>
<test>Some content</test>
</child>
</dmodule>
Он создает этот XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE dmodule[
<!ENTITY ICN-XYZ897-YYY-12345678-P-AB123-00034-A-001-01 SYSTEM 'ICN-XYZ897-YYY-12345678-P-AB123-00034-A-001-01.cgm' NDATA cgm>
<!NOTATION cgm SYSTEM 'cgm'>
<!ENTITY % ISOEntities PUBLIC 'ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML' 'http://www.s1000d.org/S1000D_4-0-1/ent/xml/ISOEntities'>
%ISOEntities;]>
<dmodule xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.s1000d.org/S1000D_4-0-1/xml_schema_flat/ipd.xsd">
<child>
<test>Some content</test>
</child>
</dmodule>
Теперь просто чтобы включить его в мое более крупное приложение.Несмотря на то, что в итоге я нашел решение, я все же хотел бы поблагодарить всех, кто нашел время, чтобы взглянуть на мой вопрос.