gpt4 book ai didi

java - 如何通过castor生成的对象在XML中按属性值查找元素

转载 作者:行者123 更新时间:2023-12-01 05:44:48 25 4
gpt4 key购买 nike

我在通过 Castor 生成的类在 XML 文件中按属性值查找元素时遇到问题。

Castor 很好地完成了 XML 到实体类的映射。但是,它不提供按名称查找元素的方法(假设名称是元素的属性)。 API 只能通过元素列表中的索引来查找元素。目前看来,如果我想按名称查找元素,我必须循环遍历元素列表才能找到它。因为它解码的每个类都有不同的字段,所以似乎很难编写一个通用方法来按名称查找元素。有没有更好的方法通过名称从元素列表中查找元素?

最佳答案

注意:我是EclipseLink JAXB (MOXy)领导者,也是 JAXB ( JSR-222 ) 专家组的成员。

<小时/>

不确定 Castor,但您可以使用 EclipseLink JAXB (MOXy) 轻松完成此操作.

客户

请注意如何通过 @XmlPath 注释在映射上指定条件 [@name='address']:

package blog.predicate;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="node")
@XmlType(propOrder={"firstName", "lastName", "address", "phoneNumbers"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlPath("node[@name='first-name']/text()")
private String firstName;

@XmlPath("node[@name='last-name']/text()")
private String lastName;

@XmlPath("node[@name='address']")
private Address address;

@XmlPath("node[@name='phone-number']")
private List<PhoneNumber> phoneNumbers;

}

XML

<?xml version="1.0" encoding="UTF-8"?>
<node>
<node name="first-name">Jane</node>
<node name="last-name">Doe</node>
<node name="address">
<node name="street">123 A Street</node>
</node>
<node name="phone-number" type="work">555-1111</node>
<node name="phone-number" type="cell">555-2222</node>
</node>

了解更多信息

关于java - 如何通过castor生成的对象在XML中按属性值查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197157/

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