XmlPath语法

节点的关系:
父(Parent)
子(Children)
同胞(Sibling)
先辈(Ancestor)
后代(Descendant)

路径表达式

nodename  选取此节点的所有子节点 
/       从根节点选取 
//      从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 
.       选取当前节点 
..      选取当前节点的父节点 
@        选取属性

谓语(Predicates)
谓语被嵌在方括号中。
/bookstore/book[1]
/bookstore/book[last()]
/bookstore/book[price<10]
通配符

*         匹配任何元素节点
@*      匹配任何属性节点
node() 匹配任何类型的节点

XPath 轴

ancestor 选取当前节点的所有先辈(父、祖父等) 
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 
attribute 选取当前节点的所有属性 
child 选取当前节点的所有子元素。 
descendant 选取当前节点的所有后代元素(子、孙等)。 
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 
following 选取文档中当前节点的结束标签之后的所有节点。 
namespace 选取当前节点的所有命名空间节点 
parent 选取当前节点的父节点。 
preceding 选取文档中当前节点的开始标签之前的所有节点。 
preceding-sibling 选取当前节点之前的所有同级节点。 
self 选取当前节点。

摘自:http://hi.baidu.com/dming4/blog/item/7f18d1ef1451fde5ce1b3ecf.html


摘自官网:http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/oxm/annotations/XmlPath.html
@Target(value={FIELD,METHOD})
@Retention(value=RUNTIME)
public @interface XmlPath

XPath based mapping is what allows an existing object model to be mapped to an existing XML schema. The @XmlPath annotation is the means by which XPath based mapping is achieved.

Example 1 - Using @XmlPath to Add a Grouping Element

Sometimes grouping elements are added to your document to organise data. JAXB has this concept for collection properties in the form of@XmlElementWrapper. Here we'll use @XmlPath for non-collection properties. In this case we'll nest the billing/shipping address data within the "contact-info" element.

 import javax.xml.bind.annotation.*;
 import org.eclipse.persistence.oxm.annotations.XmlPath;
 
 @XmlRootElement 
 @XmlAccessorType(XmlAccessType.FIELD)
 public class Customer {
     @XmlPath("contact-info/billing-address")
     private Address billingAddress;

     @XmlPath("contact-info/shipping-address")
     private Address shippingAddress;
 }
 
This will produce XML like: <customer> <contact-info> <billing-address> <street>1 Billing Street</street> </billing-address> <shipping-address> <street>2 Shipping Road</street> </shipping-address> </contact-info> </customer> Example 2 - Using @XmlPath to Map by Position

Normally in JAXB elements with the same name must be mapped to a collection property. Using the @XmlPath extension you map non-collection properties to a repeated element by index.

 import javax.xml.bind.annotation.*;
 import org.eclipse.persistence.oxm.annotations.XmlPath;
 
 @XmlRootElement 
 @XmlAccessorType(XmlAccessType.FIELD)
 public class Customer {
     @XmlPath("address[1]")
     private Address billingAddress;

     @XmlPath("address[2]")
     private Address shippingAddress;
 }
 
This will produce XML like: <customer> <address> <street>1 Billing Street</street> </address> <address> <street>2 Shipping Road</street> </address> </customer> Example 3 - Using @XmlPath to Map Two Objects to the Same Node

We have seen how @XmlPath can be used to expand the structure by adding a grouping element. @XmlPath can also be used to collapse the structure by mapping two objects to the same node.

 import javax.xml.bind.annotation.*;
 import org.eclipse.persistence.oxm.annotations.XmlPath;
 
 @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
 public class Customer {
     @XmlPath(".")
     private Address billingAddress;

     private Address shippingAddress;
 } 
 
This will produce XML like: <customer> <street>1 Billing Street</street> <shippingAddress> <street>2 Shipping Road</street> </shippingAddress> </customer>


Required Element Summary
 java.lang.Stringvalue 
          The XPath for this property.
 

Element Detail

value

public abstract java.lang.String value

The XPath for this property. A subset of the XPath specification may be used to specify mappings. The following concepts are supported:

  • Attribute - "@id"
  • Element - "address"
  • Element by Position - "address[1]"
  • Element by Predicate - "address[@type='mailing']"
  • Element Text - "name/text()"
  • Text - "text()"
  • Self - "."
  • Combination - "personal-info/name[2]/text()"

For namespace qualified nodes, the prefixes defined in the XmlNs annotations can be used to qualify the XPath fragments. Unqualified fragments will assumed to be in the namespace specified using @XmlSchema.

Example

Assuming the following namespace information has been set up using the @XmlSchema annotation:

 @XmlSchema(namespace = "http://www.example.org/FOO", 
            xmlns = {@XmlNs(prefix="ns", namespaceURI="http://www.example.com/BAR")},
            elementFormDefault = XmlNsForm.QUALIFIED) 
 package org.example;
 
 import javax.xml.bind.annotation.*;
 

Then the following XPath:

 @XmlPath("contact-info/ns:address/@id")
 

Will be qualified as:

  • contact-info - in "http://www.example.org/FOO" namespace.
  • address - in "http://www.example.com/BAR" namespace.
  • @id - in no namespace.
See Also:
XmlSchemaXmlNs


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值