我搜索了很多但从未找到我想要的东西。
我想控制当前页面中是否存在xpath。
我发现了java / xml,php等......但不仅仅是java。
如果存在xpath,我会以一种简单的方式检查当前页面。
谢谢。
问候。
答案 0 :(得分:12)
您可以使用javax.xml.xpath.XPath.evalute
方法:
示例:
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,在这种情况下,您将直接获得布尔结果。