Tôi có một ứng dụng đang thực hiện XML < -> chuyển đổi bằng cách sử dụng Jaxb và các lớp được tạo tự động với plugin maven-jaxb2.Jaxb: cách unmarshall xs: bất kỳ phần chuỗi XML nào?
Một nơi nào đó sâu trong lược đồ của tôi, tôi có khả năng nhập "BẤT K" "xml.
Cập nhật: điều này mô tả tốt hơn lược đồ của tôi. Một số XML được biết đến bao gồm một phần hoàn toàn không rõ (phần "bất kỳ").
<xs:complexType name="MessageType">
<xs:sequence>
<xs:element name="XmlAnyPayload" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="OtherElements">
....
</xs:sequence>
bản đồ này (bằng cách jaxb) vào một lớp bên trong như thế này.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
public static class XmlAnyPayload {
@XmlAnyElement(lax = true)
protected Object any;
Khi tôi unmarshall toàn bộ cấu trúc, không có vấn đề gì. "Đối tượng bất kỳ" sẽ hiển thị thành một org.apache.xerces.dom.ElementNSImpl. Bây giờ, tôi muốn tạo lại đối tượng Java theo cách thủ công và sau đó đi tới XML. Làm cách nào để lấy một số XML ngẫu nhiên và đưa vào bất kỳ phần tử (org.apache.xerces.dom.ElementNSImpl) nào để có thể xây dựng đối tượng Java?
Ngoài ra, trường hợp tiếp theo là khi tôi có phần tử này dưới dạng java, tôi muốn unmarshall phần này (để có thể trích xuất chuỗi XML của phần tử này). Nhưng điều này là không thể. Tôi nhận được một ngoại lệ về các yếu tố gốc. Nhưng không thể chú thích ElementNSImpl.
unable to marshal type "com.sun.org.apache.xerces.internal.dom.ElementNSImpl" as an element because it is missing an @XmlRootElement annotation
Bạn có bất cứ đề xuất nào về cách xử lý những vấn đề này không?
Nhờ đầu vào tốt vào miền này, tôi đã giải quyết được vấn đề này. Một cách, tôi bị mắc kẹt với nút Dom của tôi. Chỉ cần thêm một số phân tích cú pháp XML đơn giản để lấy phần tử dom từ chuỗi. Một cách khác, tôi sử dụng XML để làm việc với không gian DOM (XPATH khôn ngoan), vì nó thực sự đã cứu tôi một số thời gian và bối cảnh chuyển mạch. XPath thực sự rất tốt để giữ độ phức tạp của mã. –