2009-09-22 3 views
2

Пусть это XML:Поиск в XPath

<lib> 
<books type="paperback" name="A" /> 
<books type="pdf" name="B" /> 
<books type="hardbound" name="A" /> 
</lib> 

Что будет код XPath для поиска книги типа = «в мягкой обложке» и имя = «А»? ТИА.

В настоящее время мой код выглядит следующим образом:

import org.w3c.dom.*; 
import javax.xml.xpath.*; 
import javax.xml.parsers.*; 
import java.io.IOException; 
import org.xml.sax.SAXException; 

public class demo { 

    public static void main(String[] args) 
    throws ParserConfigurationException, SAXException, 
      IOException, XPathExpressionException { 

    DocumentBuilderFactory domFactory = 
    DocumentBuilderFactory.newInstance(); 
      domFactory.setNamespaceAware(true); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse("xml.xml"); 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
     // XPath Query for showing all nodes value 
    String version="fl1.0"; 
    XPathExpression expr = xpath.compile("//books/type[@input="paperback"]/text()"); 

    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()); 
    } 
    } 
} 
+0

И 'xpath.compile (" // books/type [@ input = "paperback"]/text() ")' также не является допустимой Java. – 2009-09-22 06:48:45

+0

Грустный, но факт: Java - это язык, на котором фреймворки в большей степени полагаются на XML, но это наиболее плохо оборудовано для обработки XML. – 2009-09-22 06:51:09

+0

Да, хотя вы можете добавить ''. – 2009-09-22 07:33:02

ответ

2
/lib/books[@type='paperback' and @name='A'] 

Посмотрите here, если вы боретесь с синтаксисом XPath, у него есть несколько приятных примеров.

Кроме того, если вам просто нужна помощь с XML в целом и связанных с ними технологий, посмотрите на руководство here

+0

@Fiona: Я прошел код, но все еще немного смущен. Если мне нужно найти «мягкую обложку» и получить соответствующее имя, можете ли вы сказать мне код для него? – fixxxer

+0

/lib/books [@ type = 'paperback']/@ name – flybywire

+0

Еще один, Поскольку атрибут type отличается в каждом теге в приведенном выше XML. Можем ли мы сохранить значение Type в переменной String и подставить его в переменную поиска xpath? – fixxxer

0

Прямо сейчас вы, кажется, искать что-то вроде <book><type input="paperback"/></book> который явно является неправильным. Ваше выражение XPath должно, вероятно, будет что-то вроде // книги [@ типа = "мягкая обложка" и @ имя = "A"]/текст()

+0

Поскольку элементы 'books' не имеют conente,' text() 'ничего не даст вам. – 2009-09-22 06:46:59

+0

Спасибо всем, кто внес свой вклад в эту тему. – fixxxer

0

Ответы выше хороши ... Я хотел бы внести свой вклад в ресурс. Лучший учебник по xpath, который я видел, - here.