【转】nekohtml+xpath范例,及注意事项

nekohtml+xpath实例,及注意事项

最近做项目用到了nekohtml+xpath

nekohtml将HTML文档解析为标准的DOM,再用XPath从DOM中抽取想要的结点。

nekohtml比起htmlparser还真是简单,但是简单就意味着不透明,出了错就不知是什么引起的,这一点真让人受不了。

下面先说说nekohtml+xpath的使用注意事项:

1.nekohtml会自动将html的标签转化为大写,因此写XPath时要用大写

//div 错误

//DIV 正确

2.用XPath处理时标签前要加命名空间,否则找不到结点,这里就要用到NamespaceContext这个类

 

class MyNamespaceContext implements NamespaceContext {
    private String ns;

    public MyNamespaceContext(String ns) {
        this.ns = ns;
    }

    public String getNamespaceURI(String prefix) {
        // TODO Auto-generated method stub
        if (prefix == null) {
            throw new NullPointerException("Null prefix");
        } else if (prefix.equals("pre")) {
            return this.ns;
        } else if (prefix.equals("xml")) {
            return XMLConstants.XML_NS_URI;
        }
        return XMLConstants.XML_NS_URI;
    }

    @Override
    public String getPrefix(String namespaceURI) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Iterator getPrefixes(String namespaceURI) {
        // TODO Auto-generated method stub
        return null;
    }
}

 

实例化XPath,并设置命名空间

 

XPathFactory factory = XPathFactory.newInstance();
        XPath xpath = factory.newXPath();
        xpath.setNamespaceContext(new MyNamespaceContext("http://www.w3.org/1999/xhtml"));
        XPathExpression expr = xpath.compile("//pre:TITLE");
 

 

 

最后推介一个firefox的XPath插件--XPath checker

附近上源文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值