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

时间:2011-06-01 06:32:31

标签: java xml mapping castor

我无法通过castor生成的类在XML文件中按属性值查找元素。

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

1 个答案:

答案 0 :(得分:0)

注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB(JSR-222)专家组的成员。


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

<强>客户

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

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>

了解更多信息