用DOM解析XML,删除!实体参考



我想使用XML的实体属性加载外部子文件。我使用以下过程进行了。

<!DOCTYPE doc [
<!ENTITY A SYSTEM "C:///XML//A.xml">
<!ENTITY B SYSTEM "C://XML//B.xml">
<!ENTITY C SYSTEM "C://CONFIGURATION//XML//C.xml">
]>
<list idPrefix="N" seqIdLength="5">
   &A;
 </list>

然后在XML中,我使用&amp;引用了这些条目。XML进行a.xml,并从此文件中读取每个XML元素。但是,如果我想从Java修改此主XML,我有问题。首先,Doctype已删除。对于删除的Doctype问题,我以以下格式更改了XML。

<!DOCTYPE doc SYSTEM "C://XML//test.dtd">

我已将以下行复制到test.dtd。

<!ENTITY A SYSTEM "C:///XML//A.xml">
<!ENTITY B SYSTEM "C://XML//B.xml">
<!ENTITY C SYSTEM "C://CONFIGURATION//XML//C.xml">

当我保存XML时,现在没有删除Doctype。但是我还有另一个问题。而不是&amp;一个参考,文件的内容是插入主XML的,并引用了实体路径。

     <list idPrefix="N" seqIdLength="5">
  <alist name = "1" xml:base="file:///C://XML//A.xml"/>
  <alist name = "2" xml:base="file:///C://XML//A.xml"/>
  <alist name = "3" xml:base="file:///C://XML//A.xml"/>
  <alist name = "4" xml:base="file:///C://XML//A.xml"/>
  <alist name = "5" xml:base="file:///C://XML//A.xml"/>
  <alist name = "6" xml:base="file:///C://XML//A.xml"/>
  <alist name = "7" xml:base="file:///C://XML//A.xml"/>
 </list>

现在我失去了实体功能。我在主XML中都有所有数据。我们有解决方案吗?

我使用了相同的方法,在以下链接与DOM解析XML时,Doctype被删除

DOMImplementationLS domImplementationLS =
(DOMImplementationLS) dom.getImplementation().getFeature("LS","3.0");
LSOutput lsOutput = domImplementationLS.createLSOutput();
FileOutputStream outputStream = new FileOutputStream("output.xml");
lsOutput.setByteStream((OutputStream) outputStream);
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
lsSerializer.write(dom, lsOutput);
outputStream.close();

,但我无法从子文件中修改值。我不知道这是合乎逻辑的。

最新更新