này mang lại cho tôi một đối tượng Document với một nút cấp cao nhất không có nút con:làm thế nào để sắp xếp một đối tượng JAXB thành org.w3c.dom.Document?
public static Document getDocument(Object jaxb)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().newDocument();
JAXBContext context = JAXBContext.newInstance(jaxb.getClass());
context.createMarshaller().marshal(jaxb, doc);
return doc;
}
Đây là cách giải quyết, mà dường như còn kém hiệu quả hơn, vì nó chuyển thành String và sau đó đến tài liệu.
public static Document getDocument(Object jaxb)
{
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(jaxb.getClass());
context.createMarshaller().marshal(jaxb, writer);
return DocumentBuilderFactory.newInstance().newDocumentBuilder().
parse(new InputSource(new StringReader(writer.toString()));
}
Có thể thực hiện những gì tôi đang cố gắng hoàn thành không?
Hóa ra rằng vấn đề là không marshalling từ JAXB để tài liệu. Vấn đề là, vì một số lý do, các truy vấn XPath không xác định không gian tên không hoạt động với đối tượng Document được trả về bởi phương thức đầu tiên, nhưng làm việc tốt với đối tượng Document được trả về bởi phương thức thứ hai. Giải pháp - ít nhất là bây giờ - là viết lại các truy vấn Xpath của tôi. –
Như một nhận xét trễ: lý do tại sao các truy vấn XPath không xác định không gian tên đang làm việc nếu bạn phân tích cú pháp dữ liệu marshalled của bạn là do các nhà xây dựng tài liệu được mặc định không nhận biết không gian tên. Khi JAXB xây dựng DOM, các thiết lập DocumentBuilder không liên quan vì không có phân tích cú pháp liên quan. – Michael