首页 文章

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

提问于
浏览
1

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

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

1 回答

  • 0

    Note: 我是EclipseLink JAXB (MOXy)领导,是JAXB(JSR-222)专家组的成员 .


    不确定Castor,但你可以用EclipseLink JAXB (MOXy)轻松完成 .

    Customer

    注意如何通过 @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>
    

    For More Information

相关问题