gpt4 book ai didi

java - 使用 Java 将未解析的实体声明添加到 XML

转载 作者:行者123 更新时间:2023-11-29 09:15:22 26 4
gpt4 key购买 nike

我正在尝试生成类似于以下内容的 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">
....
<graphic boardno="ICN-XYZ897-YYY-12345678-P-AB123-00034-A-001-01"/>
....
</dmodule>

我进行了大量搜索,但没有找到任何可以帮助我理解如何生成 <!ENTITY ...> 声明或 <!NOTATION..> 声明的信息。我看到有人提到使用 DOM Level 3 加载/保存机制,但我看过的所有示例都讨论了如何合并完整的内部 DTD,而没有讨论实体。我正在构建一个基于从数据库中提取的值来构建这些 XML 文件的应用程序,这几乎是我创建 XML 的最后一个障碍。提前感谢任何人可以提供的任何帮助。我相信有人可能会解释它,这将是我见过但未能正确理解的东西。

最佳答案

好的,我想出了一个解决方案。它并不是最漂亮的,我什至敢打赌有人会说这是一个“黑客”。除此之外,它工作正常,当我完成时 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>

现在只是将它合并到我更大的应用程序中。尽管我最终想出了一个解决方案,但我仍然要感谢所有花时间看我的问题的人。

关于java - 使用 Java 将未解析的实体声明添加到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com