gpt4 book ai didi

java - 将 XML 解码为 Java 对象

转载 作者:行者123 更新时间:2023-11-30 01:51:12 25 4
gpt4 key购买 nike

下面是我的 REST 服务假设使用的 XML 结构。我正在使用 JAX-RS 来创建服务。我无法实现这一目标。

我尝试了很多东西。现在我面临两个问题。1)当请求中涉及命名空间时,我无法将此 xml 映射到 java 类。2) 当有多个根标签时获取 null(Invoke_Service、part、GData)。如果只有部分标签,那么它的工作。

任何人都可以在这里帮助我吗?引导我找到正确的文档或示例。帮助我理解这一点。

<Invoke_Service>
<part xmlns="http://www.examplone.com" name="param">
<GData xmlns:oracle-xls-mapper="http://www.oracle.com/xsl/mapper/schemas"
xmlns:aia-xls-mapper="http://www.oracle.com/xsl/Transform/java"
xmlns:impl="http://exampletwo.com" xmlns="http://exampletwo.com">
<impl:sProduct>
<impl:productName>Machine</impl:productName>
<impl:Customer>
<item>
<impl:cus_name>James</impl:cus_name>
<impl:cus_age>22</impl:cus_age>
</item>
<item>
<impl:cus_name>Johnny</impl:cus_name>
<impl:cus_age>25</impl:cus_age>
</item>
</impl:Customer>
</impl:sProduct>
<impl:sProduct>
<impl:productName>Machine2</impl:productName>
<impl:Customer>
<item>
<impl:cus_name>Dianna</impl:cus_name>
<impl:cus_age>29</impl:cus_age>
</item>
<item>
<impl:cus_name>Daisy</impl:cus_name>
<impl:cus_age>40</impl:cus_age>
</item>
</impl:Customer>
</impl:sProduct>
<impl:sProduct>
<impl:productName>Machine3</impl:productName>
<impl:Customer>
<item>
<impl:cus_name>Sam</impl:cus_name>
<impl:cus_age>50</impl:cus_age>
</item>
<item>
<impl:cus_name>Rocky</impl:cus_name>
<impl:cus_age>30</impl:cus_age>
</item>
</impl:Customer>
</impl:sProduct>
</GData>
</part>
</Invoke_Service>

我感谢我能得到的所有帮助。

最佳答案

您可以使用Declarative Stream Mapping (DSM)流解析库可轻松将复杂的 xml 转换为 java 类。

首先,您必须以 yaml 格式定义 xml 数据和类字段之间的映射。

这里是 xml 的映射定义。我想您想获取产品列表。

DSM 忽略命名空间。

result:     
type: array
path: /.+GData/sProduct # path is regex. you don't need to define all path.
fields:
productName:
path: productName # DSM ignore namespace
customers:
type: array
path: Customer/item
fields:
name:
path: cus_name
age:
path: cus_age

要反序列化的 POJO 类:

public class Product {
public String productName;
public List<Customer> customers;



@Override
public String toString() {
return "Product [productName=" + productName + ", customers=" + customers + "]";
}



public static class Customer{
public String name;
public int age;
@Override
public String toString() {
return "Customer [name=" + name + ", age=" + age + "]";
}


}

}

解析 XML 的 Java 代码:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create(Product.class);
List<Product> itemList = (List<Product>>)dsm.toObject(xmlFileContent);
System.out.println(object);

这是输出:

[Product [productName=Machine, customers=[Customer [name=James, age=22], Customer [name=Johnny, age=25]]], Product [productName=Machine2, customers=[Customer [name=Dianna, age=29], Customer [name=Daisy, age=40]]], Product [productName=Machine3, customers=[Customer [name=Sam, age=50], Customer [name=Rocky, age=30]]]]

关于java - 将 XML 解码为 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com