我正在构建一个应用程序,它将从用户那里提取一个单词,然后使用XPath扫描文件,根据文件中是否找到该单词返回true或false。
我已经构建了以下实现XPath的类,但我要么误解了它应该如何工作,要么我的代码有问题。有人能给我解释一下如何使用Xpath进行完整的文件搜索吗?
public XPath() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
FileInputStream fileIS = new FileInputStream("text.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(fileIS);
XPathFactory xPathfactory = XPathFactory.newInstance();
javax.xml.xpath.XPath xPath = xPathfactory.newXPath();
XPathExpression expr = xPath.compile("//text()[contains(.,'java')]");
System.out.println(expr.evaluate(xmlDocument, XPathConstants.NODESET));
}
以及我目前正在测试的xml文件。
<?xml version="1.0"?>
<Tutorials>
<Tutorial tutId="01" type="java">
<title>Guava</title>
<description>Introduction to Guava</description>
<date>04/04/2016</date>
<author>GuavaAuthor</author>
</Tutorial>
<Tutorial tutId="02" type="java">
<title>XML</title>
<description>Introduction to XPath</description>
<date>04/05/2016</date>
<author>XMLAuthor</author>
</Tutorial>
</Tutorials>
找到解决方案后,我丢失了找到的条目的正确显示,正如有人在注释“java”中指出的那样,我只想扫描文本字段,这样在添加以下代码并更改我的应用程序将查找的单词后,就再也找不到了,应用程序工作了
Object result = expr.evaluate(xmlDocument, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
您的XPath正在搜索text()
节点,但是java
一词出现在@type
属性中(该属性不是text()
节点)。
如果您想在text()
和@*
中搜索单词,那么您可以使用联合|
运算符并检查其中一个/两个包含该单词:
//text()[contains(. ,'java')] | //@*[contains(., 'java')]
但是您可能还需要扫描注释()
和处理指令()
,因此可以在节点()
上进行通用匹配,然后在谓词测试中进行匹配:
//node()[contains(. ,'java')] | //@*[contains(., 'java')]
对于XPath 2.0或更高版本,您可以使用:
//node()[(.|@*)[contains(., 'java')]]
我想你可以告诉我,这真的只是打印同一行两次,一次删除一个小写e和另一个删除一个大写e。我正在寻找一种方法来合并这两个替换,然后让它替换并打印,如果它找到一个e或只是打印“所有是好的!”如果没有“E”。
问题内容: 以编程方式检查PDF文件是否被完全扫描的最佳方法是什么?我确实可以使用iText和PDFBox。我可以检查pdf文件是否包含文本,并根据结果确定该文件是否为OCRed,但是此解决方案并非100%准确。我想知道是否还有另一种方法来解决这个问题。 如您所知,解决方案必须基于Java。 问题答案: 最好的选择是检查它是否包含文本,还查看它是否包含大的页面化图像或覆盖页面的大量平铺图像。如果您
问题内容: 尽管我们已部署了最新的类,但我们正在使用的是旧版本的类。要扫描应用程序服务器所有子文件夹中的所有JAR文件,我们如何编写一个小的Shell脚本来打印出找到该特定类的JARS文件的文件名? 问题答案: 就像是: 您可以这样包装: 然后将在当前目录下找到的所有jar文件中搜索该类
我正在做一个项目,其中包含一个模块来扫描pdf,从sd卡文档xls文件,并列出它们。我也想只列出文件夹。 因为我对android非常陌生。任何人都有实现这一目标的想法。 这是我的密码:
我有一个在Apache Tomee上运行的Java EE6 Web应用程序。 我的应用程序定义了几个接口a、B和C。我有多个包含这些接口实现的.jar文件。每当客户端发出某个请求时,我的web应用程序就会使用CDI扫描这些实现,并注入所需的任何实现。 但是,我不想预先按名称配置所有这些implement.jar文件。我希望只配置一个文件夹位置,所有这些实现.jar文件都驻留在其中,并让CDI进行发
我对的体验非常糟糕,因为我使用的是和。所以我不能做扫描仪的程序。我是新手,所以请帮助我,“找不到”。这是我到目前为止的代码。