Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从XML映射到不匹配POJO的最佳方法_Java_Xml_Jaxb_Transform_Pojo - Fatal编程技术网

Java 从XML映射到不匹配POJO的最佳方法

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(xmlA)映射到jaxb生成的pojo(映射到另一个XML契约(xmlB))的“正确”方法是什么

例如,使用以下输入:

<?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+"]";
    }
}