Tôi đang cố gắng tích hợp với hệ thống của bên thứ ba và tùy thuộc vào loại đối tượng, phần tử gốc của tài liệu XML được trả về sẽ thay đổi. Tôi đang sử dụng thư viện JAXB cho Marshalling / unmarshalling.
Root1:
<?xml version="1.0" encoding="UTF-8"?>
<root1 id='1'>
<MOBILE>9831138683</MOBILE>
<A>1</A>
<B>2</B>
</root1>
Root2:
<?xml version="1.0" encoding="UTF-8"?>
<root2 id='3'>
<MOBILE>9831138683</MOBILE>
<specific-attr1>1</specific-attr1>
<specific-attr2>2</specific-attr2>
</root2>
Tôi đang tiêu thụ tất cả các XML khác nhau ánh xạ chúng vào một đối tượng chung :
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ROW")
public class Row {
@XmlAttribute
private int id;
@XmlElement(name = "MOBILE")
private int mobileNo;
@XmlMixed
@XmlAnyElement
@XmlJavaTypeAdapter(MyMapAdapter.class)
private Map<String, String> otherElements;
}
Và bộ chuyển đổi để biến các giá trị uknown thành bản đồ :
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.HashMap;
import java.util.Map;
public class MyMapAdapter extends XmlAdapter<Element, Map<String, String>> {
private Map<String, String> hashMap = new HashMap<>();
@Override
public Element marshal(Map<String, String> map) throws Exception {
// expensive, but keeps the example simpler
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("dynamic-elements");
for(Map.Entry<String, String> entry : map.entrySet()) {
Element element = document.createElement(entry.getKey());
element.setTextContent(entry.getValue());
root.appendChild(element);
}
return root;
}
@Override
public Map<String, String> unmarshal(Element element) {
String tagName = element.getTagName();
String elementValue = element.getChildNodes().item(0).getNodeValue();
hashMap.put(tagName, elementValue);
return hashMap;
}
}
Điều này sẽ đưa id và số điện thoại di động vào các trường và phần còn lại, không xác định vào bản đồ .
Điều này hoạt động nếu Phần tử gốc được cố định vào ROW như trong ví dụ trên.
Làm thế nào để làm cho công việc này sao cho phần tử gốc sẽ khác nhau trong mỗi XML? Một cách để có thể chỉ là bất khả tri đối với phần tử gốc trong khi không sắp xếp?