【发布时间】:2018-02-16 21:51:58
【问题描述】:
我正在尝试使用 MOXy 解析以下 xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dml>
<dml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<content>
<entry>
<namespace>
<meta property="abc" content="abcd" />
<meta property="xyz" content="xyzd" />
</namespace>
</entry>
<entry>
<namespace>
<meta property="abc" content="pqr" />
<meta property="xyz" content="xyzd" />
<meta property="lmn" content="qwert" />
</namespace>
</entry>
</content>
</dml>
我想将元素“元”的属性“属性”和“内容”解析为键值对。
我使用了以下链接,但没有运气。元地图对我来说是空的。 http://blog.bdoughan.com/2013/06/moxys-xmlvariablenode-using-maps-key-as.html
这是我的课程。
public static void parseDml(String dmlXmlFile) throws Exception {
DMLData dmlData = null;
try
{
JAXBContext jaxbContext = JAXBContext.newInstance(DMLData.class);
unmarshaller = jaxbContext.createUnmarshaller();
dmlData = (DMLData) unmarshaller.unmarshal(new File(dmlXmlFile));
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(dmlData, System.out);
}
catch (Exception e)
{
throw new Exception("Error while unmarshalling dml XML : " + e);
}
}
DMLData.java
@Getter
@NoArgsConstructor
@XmlRootElement(name = "dml")
@XmlAccessorType(XmlAccessType.FIELD)
public class DMLData
{
@XmlPath("content/entry")
private List<Entry> entry;
}
Entry.java
@XmlRootElement(name = "entry")
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
public class Entry
{
@XmlPath("namespace/meta")
@XmlJavaTypeAdapter(MapAdapter.class)
private Map<String, String> map = new HashMap<String, String>();
}
元.java
@XmlRootElement(name = "boeXmlMeta")
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
public class Meta
{
private Map<String, String> boeXmlMeta = new HashMap<String, String>();
@XmlPath("@property")
private String property;
@XmlPath("@content")
private String content;
public void setProperty(String model)
{
this.property = property;
}
public void setContent(String content)
{
this.content = content;
}
}
MapAdapter.java
public class MapAdapter extends XmlAdapter<List<Meta>,HashMap<String,String>> {
@Override
public ArrayList<Meta> marshal(HashMap<String, String> map) throws Exception {
ArrayList<Meta> list = new ArrayList<Meta>();
for(Entry<String, String> entry : map.entrySet()) {
Meta Meta = new Meta();
Meta.setProperty(entry.getKey());
Meta.setContent(entry.getValue());
list.add(Meta);
}
return list;
}
@Override
public HashMap<String, String> unmarshal(List<Meta> MetaList) throws Exception {
HashMap<String, String> map = new HashMap<String, String>(MetaList.size());
for(Meta Meta : MetaList)
{
map.put(Meta.getProperty() ,Meta.getContent());
}
return map;
}
}
这是我得到的输出:
<?xml version="1.0" encoding="UTF-8"?>
<dml>
<content>
<entry/>
<entry/>
</content>
</dml>
任何帮助将不胜感激。
【问题讨论】:
标签: jaxb eclipselink pojo moxy