2015-08-04 4 views
0
String query = null; 
XPathExpression expr; 
Object Result = null; 

expr = xpath.compile("//table/column[contains(translate(text(),'ABCDEFGHIJKLMNAOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'"+query+"')]//text()"); 

result = expr.evaluate(doc, XpathConstants.NODESET); 

NodeList nodes = (NodeList) result; 

for (int i = 0; i<nodes.getLength(); i++){ 
    System.out.println(nodes.item(i).getParentNode().getNodeName() + "" + nodes.item(i).getNodeValue()); 
} 

Привет, поэтому я хочу начать с того, что я новичок в xpath и довольно новичок в java. Я пытаюсь создать интерфейс запроса для этого большого XML-файла, и это то, к чему я пришел. Файл XML полон журналов и настроено несколько, как это ....Xpath содержит запрос на дочерний узел для возврата родительского узла

<database> 
      <table> 
       <column1> 
       <column2> 
       <column3> 
       ..... 

код хорошо работает на отходили колонки, которые соответствуют поисковому запросу, однако я хотел бы, чтобы оттянуть всю таблицу а затем распечатайте его. это даст мне более ценную информацию, в том числе дату штампа человека, который ввел его ect .... Я пробовал разные вещи, пытаясь получить родительский указатель из узлов (i), а затем поместив .getchildnodes в другой нодлист, но это не работа на всех. Я также попытался добавить/.. в конце xpath перед текстом(), чтобы узнать, вернет ли он родительский код, но это привело к тому, что я как-то дал мне корневой тег. Я думаю, что я близка, может быть, я не знаю, но если кто-то может помочь, это будет очень оценено, я уже давно застрял на этом.

+0

структура XML-файл выглядит следующим образом: –

+0

....... –

+0

Вы действительно имеете в виду, что имена элементов - это 'column1',' column2', или они на самом деле называются 'column'? Кроме того, вы не указали какой-либо текст в вашем примере xml. Является ли текст непосредственно в каждом элементе 'column' или в потомке? – LarsH

ответ

0

Я думаю вы хотите использовать .. вместо //

Например, чтобы получить все table с td значением xxx можно использовать

//table/tr/td[text() = 'xxx']/../.. 
+0

я получил, что для работы, поставив его перед текстом //() Спасибо большое !! –

Смежные вопросы