正 文

JAXP的演进


www.7dspace.com  更新日期:2005-10-27 2:39:10  七度空间


      计算XPath表达式

      javax.xml.xpath 包提供了根据XML文档计算XPath表达式的功能。如果一个表达式要被重用,出于性能考虑,这个XPath表达式会被编译。

顺便说一下,JAXP中的XPath 的API被设计为无状态的,这就意味着每次你要计算一个XPath表达式,你都要传入一个XML的文档。通常,很多XPath表达式是根据单个XML文档来计算的。这种情况下,如果JAXP中的XPath APIs是有状态的,XML文档只需传入一次,那样就更好了。对于底层实现来说就多了一个优化选择,可以把XML 文档源存储起来,这样就可以快速计算XPath表达式了。
一个根据XML文档计算XPath表达式得例子:

        <?xml version="1.0"?>
        <employees>
            <employee>
                <name>e1</name>
            </employee>
            <employee>
                <name>e2</name>
            </employee>
        </employees>

        //parse an XML to get a DOM to query
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        dbfactory.setNamespaceAware(true);
        dbfactory.setXIncludeAware(true);

        DocumentBuilder parser = dbfactory.newDocumentBuilder();
        Document doc = parser.parse(new File("data.xml"));

        //get an XPath processor
        XPathFactory xpfactory = XPathFactory.newInstance();
        XPath xpathprocessor = xpfactory.newXPath();

        //set the namespace context for resolving prefixes of the Qnames
        //to NS URI, if the xpath expresion uses Qnames. XPath expression
        //would use Qnames if the XML document uses namespaces.
        //xpathprocessor.setNamespaceContext(NamespaceContext nsContext);

        //create XPath expressions
        String xpath1 = "/employees/employee";
        XPathExpression employeesXPath = xpathprocessor.compile(xpath1);

        String xpath2 = "/employees/employee[1]";
        XPathExpression employeeXPath  = xpathprocessor.compile(xpath2);

        String xpath3 = "/employees/employee[1]/name";
        XPathExpression empnameXPath  = xpathprocessor.compile(xpath3);

        //execute the XPath expressions
        System.out.println("XPath1="+xpath1);
        NodeList employees = (NodeList)employeesXPath.evaluate(doc,
                   XPathConstants.NODESET);
        for (int i=0; i<employees.getLength(); i++) {
            System.out.println(employees.item(i).getTextContent());
        }

        System.out.println("XPath2="+xpath2);
        Node employee = (Node)employeeXPath.evaluate(doc, XPathConstants.NODE);
        System.out.println(employee.getTextContent());

        System.out.println("XPath3="+xpath3);
        String empname = empnameXPath.evaluate(doc);
        System.out.println(empname);

8页,页码:[1] [2] [3] [4] [5] [6] [7] [8] 

上一篇:快速了解IDS和IPS的区别
下一篇:AS3.0概要–了解AS3.0的改变
作者:  来源:Matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐