Java 从XML映射到不匹配POJO的最佳方法
处理将一个XML(xmlA)映射到jaxb生成的pojo(映射到另一个XML契约(xmlB))的“正确”方法是什么 例如,使用以下输入:Java 从XML映射到不匹配POJO的最佳方法,java,xml,jaxb,transform,pojo,Java,Xml,Jaxb,Transform,Pojo,处理将一个XML(xmlA)映射到jaxb生成的pojo(映射到另一个XML契约(xmlB))的“正确”方法是什么 例如,使用以下输入: <?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title>
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
</book>
</catalog>
其中,作者映射到项目,标题映射到制造商
目前我正在使用xml转换,然后再映射;这是最好/正确的方法吗?或者,对于此类问题,行业标准是什么
谢谢注意:类名应该是混合大小写(部分
),字段名应该是小写,或者更确切地说是camelCase(项
和制造商
)
您可以在
@xmlement
注释中指定元素名称
public class Test {
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\"?>\n" +
"<catalog>\n" +
" <book id=\"bk101\">\n" +
" <author>Gambardella, Matthew</author>\n" +
" <title>XML Developer's Guide</title>\n" +
" </book>\n" +
"</catalog>";
JAXBContext jc = JAXBContext.newInstance(Catalog.class, PART.class);
Unmarshaller u = jc.createUnmarshaller();
Catalog catalog = (Catalog)u.unmarshal(new StringReader(xml));
for (PART part : catalog.parts)
System.out.println(part.toString());
}
}
@XmlRootElement(name="catalog")
class Catalog {
@XmlElement(name="book")
List<PART> parts;
}
class PART
{
@XmlElement(name="author")
private String ITEM;
@XmlElement(name="title")
private String MANUFACTURER;
@Override
public String toString()
{
return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
}
}
看一看:您谈论的是“jaxb生成的pojo”,但您没有展示它们。它们类似于名为
Catalog
和Book
的类,因此在JAXB为您解组书籍之后,您可以将书籍
映射到部分
。我不知道为什么需要xml转换和映射。我无法修改PART的类文件,因为它们已经有不同的元素名称
public class Test {
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\"?>\n" +
"<catalog>\n" +
" <book id=\"bk101\">\n" +
" <author>Gambardella, Matthew</author>\n" +
" <title>XML Developer's Guide</title>\n" +
" </book>\n" +
"</catalog>";
JAXBContext jc = JAXBContext.newInstance(Catalog.class, PART.class);
Unmarshaller u = jc.createUnmarshaller();
Catalog catalog = (Catalog)u.unmarshal(new StringReader(xml));
for (PART part : catalog.parts)
System.out.println(part.toString());
}
}
@XmlRootElement(name="catalog")
class Catalog {
@XmlElement(name="book")
List<PART> parts;
}
class PART
{
@XmlElement(name="author")
private String ITEM;
@XmlElement(name="title")
private String MANUFACTURER;
@Override
public String toString()
{
return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
}
}