检查我的页面中是否存在xpath

时间:2012-07-09 07:54:20

标签: java xpath

我搜索了很多但从未找到我想要的东西。

我想控制当前页面中是否存在xpath。

我发现了java / xml,php等......但不仅仅是java。

如果存在xpath,我会以一种简单的方式检查当前页面。

谢谢。

问候。

3 个答案:

答案 0 :(得分:12)

您可以使用javax.xml.xpath.XPath.evalute方法:

http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPath.html#evaluate(java.lang.String,%20java.lang.Object,%20javax.xml.namespace.QName)

示例:

XPathFactory factory = XPathFactory.newInstance();
XPath path = factory.newXPath();
Node node = (Node) path.evaluate("//myXPath", document, XPathConstants.NODE);
if (node == null)
    // don't exists
else
    // I exist!

<强>更新

如何获得document 复制粘贴我的旧代码的一些行:

BufferedInputStream bufferPage = new BufferedInputStream(new URL("http://www.yourUrl.com").openStream());

Tidy tidy = new Tidy();
tidy.setQuiet(true);
tidy.setShowWarnings(false);
tidy.setInputEncoding("UTF-8");
Document document = tidy.parseDOM(bufferPage, null);
document.normalize();

我使用库(Tidy)来读取html页面。

http://jtidy.sourceforge.net/download.html
http://jtidy.sourceforge.net/apidocs/index.html?org/w3c/tidy/package-tree.html

答案 1 :(得分:2)

您可以使用此实用程序方法返回XPath查询的值(如果它存在,则为XML标记或XML属性)。否则,它将抛出一个异常,你将按照你想要的方式处理:

public String getValue(String xpathQuery) throws Exception
{
    Node node = null;

    try
    {

        node = (Node) xPath.evaluate(xpathQuery, doc, XPathConstants.NODE);
        if (node == null)
            throw new Exception("Xpath query "+xpathQuery+" returned no results");

        if (node.getNodeType() == Node.ATTRIBUTE_NODE)
            return node.getNodeValue();
        else
            return node.getTextContent();
    } catch (Exception e)
    {
        throw new Exception("Failed to get value from " + doc.getDocumentURI() + " using XPath expression: " + xpathQuery, e);
    }
}

答案 2 :(得分:1)

如果您使用的是JAXP API,则可以使用返回NODE-SET的XPath表达式,然后在Java代码中检查返回的NodeList是否为空;或者您可以将结果类型指定为BOOLEAN,在这种情况下,您将直接获得布尔结果。