XPath简介与使用三

七、在Java中使用Xpath

 

在java1.5中推出了一个javax.xml.xpath包专门用来在java中使用Xpath表达式来读取xml。

 

1. 数据类型

 

在学习之前首先需要注意的是:Xpath的数据并不与Java有一一对应关系,Xpath1.0只声明了四种数据类型:

 

  • node-set
  • number
  • boolean
  • string
  •  

    对应到java就是:

     

  • number 映射为 java.lang.Double
  • string 映射为 java.lang.String
  • boolean 映射为 java.lang.Boolean
  • node-set 映射为 org.w3c.dom.NodeList
  •  

    因此,在使用java的xpathAPI时,需要注意返回类型:

     

    public Object evaluate(Object item, QName returnType)throws XPathExpressionException;
    
    public String evaluate(Object item)throws XPathExpressionException;
    
    public Object evaluate(InputSource source, QName returnType)throws XPathExpressionException;
    
    public String evaluate(InputSource source)throws XPathExpressionException;

     

    不指定返回类型时,缺省返回类型为String。指定返回类型时,需要把返回值由Object类型强制转换成对应的返回类型。

     

     

    2. API的使用

    类似于Dom,要得到一个Xpath对象,可以如下使用:

     

    		XPathFactory factory = XPathFactory.newInstance();
    		XPath xpath = factory.newXPath();
    		XPathExpression expression = xpath.compile("/bookstore//book/title/text()");

     

    还是以之前的xml文档为例。要得到这个表达式的结果,我们先要得到一个输入对象,例如一个document:

     

    		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
    		Document document = documentBuilder.parse(new File("books.xml"));
    		NodeList list = (NodeList) expression.evaluate(document,XPathConstants.NODESET);

     

    这里可以看出,在使用Xpath的时候,我们好像需要很清楚的知道返回结果是什么。否则就不能得到意想的结果。

     

    最后,我们得到一个title的list值:

     

    		for(int i = 0;i<list.getLength();i++){
    			System.out.println(list.item(i).getNodeValue());
    		}
    Everyday Italian
    Harry Potter
    XQuery Kick Start
    Learning XML

     

    你可能感兴趣的:(java,xml)