使用XPath查询搜索String的一部分

时间:2011-04-15 11:50:10

标签: java xml xpath

我正在使用以下XPath查询来搜索书籍作者的姓名,并在与作者匹配时返回书名。

String rawXPath = String.format("//book[author= '%s']/bookname/text()", authorBook);  

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr 
 = xpath.compile(rawXPath);

Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue()); 
}

如何修改搜索以便我可以搜索特定单词的内容..... / content(节点名称)。

示例:xml内容变量中的字符串:“这本书包含了我们祖先的荣耀和历史。它对我们日常生活的影响是巨大的。”

现在我想搜索“每日”这个词。如果它每天匹配,它将重新调用用户想要的书名/作者名称watever。

由于

4 个答案:

答案 0 :(得分:2)

使用contains() Xpath功能。

//book[contains(content, '%s')]/bookname

取决于您输入XML的结构

答案 1 :(得分:1)

你想要

//book[contains(content, $searchString)
     and
       author = $wantedAuthor
      ]
       /bookname/text()

这将选择作为text()元素的子元素的bookname个节点,该元素是文档中任何book元素的子元素,其content子元素的字符串值包含字符串(包含在)$searchString中,其author元素的字符串值与$wantedAuthor变量中包含的字符串相同

在此Xpath表达式中,变量需要由特定字符串替换。此外,它假定元素contentbook的孩子。

我不了解Java,但假设最终的Java代码如下所示:

String.format("//book[contains(content, '%s') 
                    and 
                     author= '%s']/bookname/text()", 
              searchString, authorBook);   

答案 2 :(得分:0)

如果你的xml看起来像这样:

 <book>
   <author> Author Name </author>
   <description> This book contains the glory and history of our forefathers. And the impact of it in our daily life is immense.</description>
 </book>

然后你可以尝试:

String rawXPath = "//book//*[contains(text(),\"daily\")]";

表示“给任何儿童持有包含'每日'一词的文字的任何书籍元素。

我希望能帮到你!干杯!

答案 3 :(得分:0)

现在,如果你想搜索一个节点内的一个术语你可以这样做 -

String rawXPath = String.format("//book/title[contains(innerItem, '%s')]/type/text()", value);

为每个节点添加一个反斜杠,并在。

中添加节点名称和ur