Làm thế nào để dom với java xóa tài liệu khi chỉnh sửa xml?Phân tích cú pháp xml bằng DOM, DOCTYPE sẽ bị xóa
có tập tin này xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE map[ <!ELEMENT map (station*) >
<!ATTLIST station id ID #REQUIRED> ]>
<favoris>
<station id="5">test1</station>
<station id="6">test1</station>
<station id="8">test1</station>
</favoris>
chức năng của tôi là rất cơ bản:
public static void EditStationName(int id, InputStream is, String path, String name) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(is);
Element e = dom. getElementById(String.valueOf(id));
e.setTextContent(name);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
FileOutputStream fos = new FileOutputStream(path);
Result result = new StreamResult(fos);
Source source = new DOMSource(dom);
xformer.setOutputProperty(
OutputKeys.STANDALONE,"yes"
);
xformer.transform(source, result);
}
nó làm việc nhưng các loại tài liệu bị xóa! và tôi chỉ có toàn bộ tài liệu nhưng không có phần tài liệu, điều này quan trọng đối với tôi vì nó cho phép tôi lấy lại bằng id! cách chúng tôi có thể giữ nguyên loại tài liệu? tại sao nó xóa nó? Tôi đã thử nhiều giải pháp với các khóa đầu ra chẳng hạn hoặc omImpl.createDocumentType nhưng không có giải pháp nào trong số này hoạt động ...
cảm ơn bạn!
Tôi ngạc nhiên khi bạn nhận được bất kỳ thứ gì; XML của bạn không hợp lệ. –
thực sự nhưng ở đâu? – KitAndKat
Hai điều: 1) Loại tài liệu của bạn (bản đồ) không khớp với phần tử gốc của bạn (ưa thích). 2) Phần tử "trạm" không được khai báo. Bạn nên thêm tuyên bố phần tử cho trạm và sau đó thay đổi "ưa thích" thành "bản đồ" (hoặc thay đổi tuyên bố loại tài liệu và phần tử). –