Zdravim,
me nize uvedeny kod funguje.
Pro jistotu posilam svuj program v jave a soubor newXml.xml
Pouzivam Dom4J verze 1.6.1., neni problem v tom?
Lukas
[EMAIL PROTECTED] wrote:
Děkuji za radu ale nebudete mi věřit i tohle jsem zkoušel a
Exception in thread "main" org.dom4j.InvalidXPathException: Invalid XPath _expression_: '/el/menutem1'. Caused by: org/jaxen/dom4j/Dom4jXPath
at org.dom4j.xpath.DefaultXPath.parse(DefaultXPath.java:362)
at org.dom4j.xpath.DefaultXPath.<init>(DefaultXPath.java:59)
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
už mě snad napadá jen že jsem nějak nenastavil dom4j ... ale bohužel nevím kde
zkoušel jsem přepsat inicializační část na SAXReader kdyz to debuguju tak se vytvori spravnej document
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
File fName = new File("newXml.xml");
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(fName);
} catch (DocumentException ex) {
ex.printStackTrace();
}
List item = document.selectNodes("/el/menutem1");
pro uplnost vypisu newXml.xml
<?xml version="1.0" encoding="UTF-8"?>
<el>
<menutem1 >prvni položka</menutem1>
<menuitem2>druhá položka</menuitem2>
<menuitem2>třetí položka</menuitem2>
</el>
asi bude jednodusi zustat u JDOM .(( proste uz jsem to kontroloval ani nevim kolikrat
a porad at napisu do document.selectNodes("/el/menutem1"); cokoliv tak mi to spadne na
XPath.V debugu me vsechno projde vse se vytvori tak jak predpokladam ze ma a stejne me XPath odstreli.
S pozdravem Petr Roubal
Message: 4
Date: Tue, 14 Nov 2006 22:44:10 +0100
From: Lukas Barton <[EMAIL PROTECTED]>
Subject: Re: off topic dotaz .( dom4j
To: Java <[email protected]>
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=windows-1250; format=flowed
Pouzijte jen /el/menutem1. Vice viz:
http://www.w3schools.com/xpath/default.asp.
Lukas
PS: opravte si preklep menutem1 na menuitem1 (chybejici i).
[EMAIL PROTECTED] wrote:
Dobrý den,
najde se dobrá duše která mě poradí kde dělám chybu.
Mám následující problém:
parsoval jsem Xml pomocí JDOM, ted ale chci přejít na dom4j kvůli XPath
můj problém je ,že právě když napíšu nějaký XPath tak mi debuger v
netbeansech zahlásí špatný XPath
žiju v domění ,že když mám soubor newXml.xml v něm root element el a v
něm elementy menutem1
,pak přes XPath k nim přistoupím pomocí "/newXml/el/menutem1" ... abych
řekl pravdu ... zkoušel jsem už hodně kombinací a ani jednu mi to
nesežralo.
ještě dodávám že newXml je v rootu projektovýho adresáře a pomocí JDOM
jsem to v pohodě načítal.
Pro lepší představu přikládám následující kus kodu : zaremovaný je verze
pro JDOM která chodila (teda to co jsem musel změnit při přechodu na dom4j)
String filename = new String("newXml.xml");
String menuitem = null;
List clearedList = null;
// SAXBuilder parser = new SAXBuilder();
DOMBuilder parser = new DOMBuilder();
DOMDocument doc = new DOMDocument(filename);
// Document doc;
// try{ > // doc = parser.build(filename); > //
doc = parser.build()
// }
// catch(Exception ex){
// ex.printStackTrace();
// }
// List item = doc.getRootElement().getChildren("menutem1");
List item = doc.selectNodes("/newXml/el/menutem1");
Iterator i = item.iterator();
clearedList = new ArrayList();
while (i.hasNext())
{
Element polozka = (Element)i.next(); >
menuitem = polozka.getValue();
> clearedList.add(menuitem); > >} >
předpokládám ale ,že problém kterej řeším může být jen následek nějaký
základní chyby už v inicializaci Parseru a documentu.
Za případné odpovědi předem děkuji Petr Roubal
|
package test;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Dom4J {
/**
* @param args
*/
public static void main(String[] args) {
File fName = new File("newXml.xml");
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(fName);
} catch (DocumentException ex) {
ex.printStackTrace();
}
List item = document.selectNodes("/el/menutem1");
for (Object object : item) {
System.out.println(((Node)object).getText());
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<el>
<menutem1 >prvni položka</menutem1>
<menuitem2>druhá položka</menuitem2>
<menuitem2>tÅetà položka</menuitem2>
</el>