Chúng tôi đang sử dụng dom4j 1.6.1, để phân tích cú pháp XML từ một nơi nào đó. Đôi khi, sự cân bằng đã đề cập đến không gian tên (ví dụ:) và đôi khi không(). Và nó làm cho cuộc gọi của Element.selectSingleNode (String s) thất bại.Xử lý không gian tên sạch với dom4j
Còn bây giờ chúng tôi có 3 giải pháp, và chúng tôi không hài lòng với họ
1 - Hủy bỏ tất cả các điều xảy ra không gian tên trước khi làm bất cứ điều gì với tài liệu xml
xml = xml .replaceAll("xmlns=\"[^\"]*\"","");
xml = xml .replaceAll("ds:","");
xml = xml .replaceAll("etm:","");
[...] // and so on for each kind of namespace
2 - Hủy bỏ namespace ngay trước khi nhận được một nút Bằng cách gọi
Element.remove(Namespace ns)
Nhưng nó chỉ hoạt động cho một nút và mức độ đầu tiên của đứa trẻ
3 - rối rắm bây mã bằng cách
node = rootElement.selectSingleNode(NameWithoutNameSpace)
if (node == null)
node = rootElement.selectSingleNode(NameWithNameSpace)
... Vì vậy, bạn nghĩ gì? Phù thủy một là tồi tệ hơn? Bạn có giải pháp khác để đề xuất?
Tôi sẽ cố gắng đào tài liệu về không gian tên với tiền tố rỗng. Dù sao cũng cảm ơn bạn. Giới thiệu về nguồn của tệp XML: không phải là cách mà chúng thay đổi bất cứ điều gì. Nhưng tệp có hoặc không có không gian tên là hợp lệ. Với các tệp, chúng tôi xây dựng các đối tượng mà chúng tôi sử dụng trong hệ thống của mình. Nhưng chúng tôi không bao giờ "writte" một cái gì đó. (chúng tôi không có quyền sửa đổi tệp xml) –