2016-12-05 3 views
0

Я хотел загрузить внешние подфайлы, используя атрибут ENTITY XML. Я сделал это, используя следующую процедуру.Разбор xml с DOM, ссылка ENTITY удалена

<!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, я ссылки на эти записи с помощью &. И XML идет A.xml и читает каждый элемент xml из этого файла. Но если я хочу изменить этот основной xml из java, у меня проблема. Прежде всего, 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 не удаляется. Но у меня другая проблема. Вместо & Ссылка, содержимое файла A вставляется в основной xml и со ссылкой на путь ENTITY.

 <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> 

И теперь я потерял функциональность ENTITY. У меня есть все данные в основном xml. У нас есть решение для этого?

ответ

0

Я использовал тот же подход, который сказал в следующую ссылку Parsing xml with DOM, DOCTYPE gets erased

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(); 

Но я не могу изменить значения из подзаголовков файла. Я не знаю, что это логично.

Смежные вопросы