2016-03-13 6 views
0

я пытаюсь получить результат выражения XPath, мой файл XML, как это:ошибка с использованием XPath в коде Java

<?xml version="1.0"?> 
<all> 
<test1> 
</test1> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
</catalog> 
</all> 

и мой Java-код:

public class xpath_test { 

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


     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = (Document) builder.parse("C:\\Users\\HC\\Desktop\\dataset\\book.xml"); 
     XPathFactory xPathfactory = XPathFactory.newInstance(); 
     XPath xpath = xPathfactory.newXPath(); 
     XPathExpression expr = xpath.compile("/all/catalog"); 
     NodeList nodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      System.out.println(nodeList.item(i).getFirstChild().getNodeValue()); 
     } 

    } 
} 

я получил исключение:

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl cannot be cast to org.jdom2.Document 

особенно в этой линии Document doc = (Document) builder.parse("C:\\Users\\HC\\Desktop\\dataset\\book.xml");

зная, что я импортировать import org.jdom2.Document;

ответ

1

попытаться использовать стандартный интерфейс

import org.w3c.dom.document 

вместо

import org.jdom2.Document 
+0

я сделал, ушел исключение, но я ничего не получил в результате, это пустая – kivok94

+0

, насколько я вижу, первый дочерний элемент каталога является текстовым узлом только для whistespace, а не элементом «book». – Pierre

+0

Я тестировал это же выражение xpath с тем же файлом xml в онлайн-тестере, и это приносит мне результат: / – kivok94

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