Ben,
You don't *need* to specify a namespace, and it works if you don't. Not sure
if that is one of your requirements, though. I don't use namespaces in my
xml documents when parsing with dom4j, and all works fine. Can't speak to
whether dom4j *should* handle namespaces since I don't use them. I took out
your DOCTYPE line and the xpaths work fine for me, but again, won't help you
if you need to specify some namespace.
HTH
Steve
BTW, here's the class I wrote to do your test. Thought it might help, but
it's pretty simple.
import java.io.*;
import org.dom4j.*;
import org.dom4j.io.*;
import org.dom4j.xpath.*;
import java.net.MalformedURLException;
public class XPathTest {
private String fileName,xpathExpression;
private Document document;
private Element root;
XPathTest(String fileName, String xpathExpression){
this.fileName = fileName;
this.xpathExpression = xpathExpression;
}
void go(){
Node n = root.selectSingleNode(xpathExpression);
System.out.println("Root name is: " +
root.getName());
System.out.println("xpath:" + xpathExpression +
":");
if ( n == null ) {
System.out.println("Node is empty");
return;
}
System.out.println("Name of node: " + n.getName());
System.out.println("text of node: " + n.getText());
}
public void openXMLFile() {
try {
File file = new File(fileName);
SAXReader xmlReader = new SAXReader();
document = xmlReader.read(file);
root = document.getRootElement();
} catch (MalformedURLException mue) {
System.out.println("Can not form URL from this file:
" + fileName);
mue.printStackTrace(System.out);
System.exit(-1);
} catch (DocumentException de) {
System.out.println("Error attempting to parse: " +
fileName);
de.printStackTrace(System.out);
System.exit(-1);
}
}
public static void main(String[] args){
XPathTest xpathTest = new XPathTest(args[0], args[1]);
xpathTest.openXMLFile();
xpathTest.go();
}
}
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Ben Munat
Sent: Thursday, January 15, 2004 12:10 PM
To: [EMAIL PROTECTED]
Subject: Re: [dom4j-user] xpath not working
Thanks for getting back to me Martin. That's very strange that what I
pasted into my email doesn't have the namespace declaration on it. The
actual file definitely does, because XmEdil flags the doc as not
well-formed when I open it without the namespace declaration.
So, not sure how I got that (actually, I think it was the console output
of my little dom4j test, which is weird: it outputs the whole doc when I
select "/" but strips the namespace off?), but all of my test xpaths in
XmEdil have been with the namespace declaration. I hadn't tried putting
the xhtml: prefix on my xpath selections, but that still didn't work.
I'm as stumped as ever, though I guess I should find an xpath mailing
list... it would appear that it's not just dom4j's xpath implementation
that is the problem. I can't get any xpaths (beyond /) to work in this
other program either. Sigh.
b
Bradley, Martin wrote:
> Ben,
>
> A couple of things to get started:
> 1. This document isn't well formed xml. Try to check the well formedness
> in your editor and you'll get a message about not being able to define a
> default namespace in the DTD. You need <html
> xmlns="http://www.w3.org/1999/xhmtl"> to replace your html element to
> define a default namespace for the rest of the document (and/or check
> out this link
> http://www.biglist.com/lists/xsl-list/archives/200104/msg00568.html Jeni
> describes other ways to define the namespace using the DTD - I don't do
> this much so I would just confuse the issue more)
> 2. the reason you aren't getting anything back is due to the lack of a
> namespace or default namespace
> 3. After doing (1) use your xpath tool and set a namespace with a prefix
> (or set a default if you can) I used
> xmlns:xhtml="http:www.w3.org/1999/xhtml"
>
> Then to your original example do //xhtml:[EMAIL PROTECTED] and you'll get a node
> list of the elements.
>
> I'm not sure how to do this in dom4j (I'm just learning the api's
> myself) but you should be able to set a namespace and prefix. If this
> doesn't fix your problem I hope it sheds some light on what's actually
> happening.
>
> I've got a busy day today, but I'll try to look at this later if I get a
> chance.
>
> Hope this helps!
> Marty
> -----Original Message-----
> From: Ben Munat [mailto:[EMAIL PROTECTED]
> Sent: Thursday, January 15, 2004 1:57 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [dom4j-user] xpath not working
>
>
> McDonough, Michael wrote:
> > While a valid html file, do you know whether it is a well-formed XML
> > document?
>
> Bradley, Martin wrote:
>
>>do you have a way to externally test the xpath expression into your
>
> html
>
>>doc? I use Xselerator. If you don't post the sample html and I can
>>verify the path is returning a nodelist.
>
>
>
> Thanks for getting back to me... good idea. I used a prog called XmEdil
> which has an xpath tester (and tests the doc for validty and
> well-formednes when I open it). And, it seems I am doing something wrong
> with the xpath: when I select "/" I get the whole doc still, but when I
> put in any other xpath (//head, //p, etc.) I get no results.
>
> Now, when I select "/", the xpath tester lists its result as being of
> type "document"... does this mean that I have to "get into" the document
> before my xpaths will work? I don't remember any such thing from my
> xpath/xsl class.
>
> And actually, I already tried running the dom4j xpath methods after
> selecting the root node of the document:
>
> Element root = d.getRootElement();
> Node n = root.selectSingleNode("//p");
>
> That doesn't work either. :-(
>
> Anyway, here's the html... hope you guys have more ideas.
>
> Thanks,
>
> Ben
>
> PS: Just noticed that the xpath builder window has a tab called "nodes"
> which shows a list of the elements and attributes in my doc (p, div, a,
> class, etc). So, it's even figuring out that there are sub nodes within
> this "document" element... but I can't select them with xpaths!?
>
> -------------------------------------------------
>
> Using this as test doc:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
>
> <html>
> <head>
> <title>
> test page
> </title>
> </head>
> <body>
> <div class="navbox">
> <p>
> SITE LINKS:
> </p>
> <a href="#">A link</a><br />
> <a href="#">A link again</a><br />
> <a href="#">Another link</a><br />
> <a href="#">A link too</a><br />
> </div>
> <div class="content">
> <h1>
> Test page!
> </h1>
> <p>
> Lobore et dolore nagna aliquam erat volupat. At enim ad
> minimin veniami quis nostrud
> exercitation lorem ipsum dolor sit amet, consectetur adips
> cing elit, diam nonnumy
> eiusmod tempor incidunt ut ullamcorper suscripit laboris
> nisi ut alquip exea commodo
> consequat, consectetur adips cing elit.
> </p>
> </div>
> </body>
> </html>
>
>
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System offering
> advanced branching capabilities and atomic changes on 50+ platforms.
> Free Eval! http://www.perforce.com/perforce/loadprog.html
> _______________________________________________
> dom4j-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/dom4j-user
>
> NOTICE: This E-mail may contain confidential information. If you are not
> the addressee or the intended recipient please do not read this E-mail
> and please immediately delete this e-mail message and any attachments
> from your workstation or network mail system. If you are the addressee
> or the intended recipient and you save or print a copy of this E-mail,
> please place it in an appropriate file, depending on whether
> confidential information is contained in the message.
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System offering
> advanced branching capabilities and atomic changes on 50+ platforms.
> Free Eval! http://www.perforce.com/perforce/loadprog.html
> _______________________________________________
> dom4j-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/dom4j-user
>
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user