Đối với những gì nó đáng giá, đây là một giải pháp tôi đã đưa ra bằng cách sử dụng thư viện dom4j . (Tôi đã kiểm tra xem nó có hoạt động không.)
Đọc phân đoạn XML thành một org.dom4j.Document
(lưu ý: tất cả các lớp XML được sử dụng bên dưới là từ org.dom4j; xem Phụ lục):
String newNode = "<node>value</node>"; // Convert this to XML
SAXReader reader = new SAXReader();
Document newNodeDocument = reader.read(new StringReader(newNode));
Sau đó lấy Tài liệu mà nút mới được chèn vào và Phần tử mẹ (sẽ là) từ đó. (Org.w3c.dom.Document của bạn sẽ cần được chuyển đổi thành org.dom4j.Document tại đây.) Với mục đích thử nghiệm, tôi đã tạo một tài liệu như thế này:
Document originalDoc =
new SAXReader().read(new StringReader("<root><given></given></root>"));
Element givenNode = originalDoc.getRootElement().element("given");
Thêm phần tử con mới rất đơn giản:
givenNode.add(newNodeDocument.getRootElement());
Làm xong. Đầu ra originalDoc
bây giờ mang lại:
<?xml version="1.0" encoding="utf-8"?>
<root>
<given>
<node>value</node>
</given>
</root>
Phụ lục : Vì câu hỏi của bạn nói về org.w3c.dom.Document
, đây là cách chuyển đổi giữa câu hỏi đó và org.dom4j.Document
.
DOMWriter writer = new DOMWriter();
org.w3c.dom.Document w3cDoc = writer.write(dom4jDoc);
DOMReader reader = new DOMReader();
Document dom4jDoc = reader.read(w3cDoc);
(Nếu bạn cần cả hai loại Document
thường xuyên, có thể hợp lý nếu đặt chúng trong các phương thức tiện ích gọn gàng, có thể trong một lớp được gọi XMLUtils
hoặc một cái gì đó tương tự.)
Có thể có nhiều cách tốt hơn để làm điều này, ngay cả khi không có bất kỳ thư viện bên thứ ba nào. Nhưng trong số các giải pháp được trình bày cho đến nay, theo tôi đây là cách dễ nhất, ngay cả khi bạn cần thực hiện chuyển đổi dom4j <-> w3c.
Cập nhật (2011): trước khi thêm phụ thuộc dom4j vào mã của bạn, hãy lưu ý rằng nó không phải là một dự án được duy trì tích cực và cũng có một số vấn đề khác . Phiên bản cải tiến 2.0 đã có từ lâu nhưng chỉ có phiên bản alpha. Bạn có thể muốn xem xét một giải pháp thay thế, như XOM, để thay thế; đọc thêm trong câu hỏi được liên kết ở trên.