[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: XPath problem

Subject: RE: XPath problem
From: "David P. Nesbitt" <david_p_nesbitt@xxxxxxxxx>
Date: Thu, 27 Jan 2005 15:15:32 -0800 (PST)
dom4j xpath
Michael and Jarno,

Thanks always for your excellent assistance.  XSLT
adoption is facilitated by your kind expertise on this
mailing list.

The '&lt;=' problem was solved with '<='.  Thanks for
catching that.

I still have the "*" problem though.  It does not seem
to find the Node when the XPath utilizes the asterisk.
 It may be a DOM4J issue, but before going there I
thought I would check with you folks first.  I am
including a small, standalone Java test program that
demostrates this problem.  The XML document is a
static String in the source file.  Please let me know
if you see any problems with it.  Here is what I get
when I run the program:

C:\>java -cp
.;dom4j.jar;xercesImpl.jar;xml-apis.jar;jaxen.jar Test
toDate = FAIL

Regards,
Dave

import java.util.HashMap;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.dom4j.XPath;

public class Test
{

   private static final Map NAMESPACE_URIS = new
HashMap();
   static
   {
      NAMESPACE_URIS.put("rr",
                        
"http://www.mwvis.com/interfaces/ReportRequest.xsd");
      NAMESPACE_URIS.put("xqx",
                        
"http://www.w3.org/2003/12/XQueryX");
      NAMESPACE_URIS.put("xsi",
                        
"http://www.w3.org/2001/XMLSchema-instance");
   }

   private static final String REQUEST_DOCUMENT
      = "<rr:ReportRequest
name=\"MisplacedItemsHistory\""
      + "       
xmlns:rr=\"http://www.mwvis.com/interfaces/ReportRequest.xsd\""
      + "       
xmlns:xqx=\"http://www.w3.org/2003/12/XQueryX\""
      + "       
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
      + "   <rr:Specification responseType=\"Xml\"
returnTotalRecords=\"true\">"
      + "      <rr:CountPerPage>20</rr:CountPerPage>"
      + "      <rr:Page>4</rr:Page>"
      + "      <rr:UserId>6</rr:UserId>"
      + "   </rr:Specification>"
      + "   <xqx:whereClause>"
      + "      <xqx:expr xsi:type=\"operatorExpr\"
infix=\"true\">"
      + "         <xqx:opType>and</xqx:opType>"
      + "         <xqx:parameters>"
      + "            <xqx:expr
xsi:type=\"operatorExpr\" infix=\"true\">"
      + "              
<xqx:opType>&gt;=</xqx:opType>"
      + "               <xqx:parameters>"
      + "                  <xqx:expr
xsi:type=\"stringConstantExpr\">"
      + "                    
<xqx:value>DateMisplaced</xqx:value>"
      + "                  </xqx:expr>"
      + "                  <xqx:expr
xsi:type=\"stringConstantExpr\">"
      + "                     <xqx:value>2004-06-01
00:00:00.000000</xqx:value>"
      + "                  </xqx:expr>"
      + "               </xqx:parameters>"
      + "            </xqx:expr>"
      + "            <xqx:expr
xsi:type=\"operatorExpr\" infix=\"true\">"
      + "              
<xqx:opType>&lt;=</xqx:opType>"
      + "               <xqx:parameters>"
      + "                  <xqx:expr
xsi:type=\"stringConstantExpr\">"
      + "                    
<xqx:value>DateMisplaced</xqx:value>"
      + "                  </xqx:expr>"
      + "                  <xqx:expr
xsi:type=\"stringConstantExpr\">"
      + "                     <xqx:value>2004-07-01
00:00:00.000000</xqx:value>"
      + "                  </xqx:expr>"
      + "               </xqx:parameters>"
      + "            </xqx:expr>"
      + "         </xqx:parameters>"
      + "      </xqx:expr>"
      + "   </xqx:whereClause>"
      + "</rr:ReportRequest>";
      
   private static final String XPATH_TO_DATE_NODE
         =
"/rr:ReportRequest/xqx:whereClause/*/xqx:expr["
         + "@xsi:type = 'operatorExpr' "
         + "and xqx:opType = '<=' "
         + "and xqx:parameters/xqx:expr[1]/xqx:value =
'DateMisplaced']"
         + "/xqx:parameters/xqx:expr[2]/xqx:value";

   public static void main(String[] args)
   {
      try {
         Document requestDoc =
DocumentHelper.parseText(REQUEST_DOCUMENT);
         String toDate = getToDate(requestDoc);
         System.out.println("toDate = " + toDate);
      } catch (Exception e) {
e.printStackTrace(System.out); }
   } /* main */
   
   private static String getToDate(Document
requestDoc)
   {
      Node toDateNode = null;
      XPath xpath = null;

      xpath =
requestDoc.createXPath(XPATH_TO_DATE_NODE);
      xpath.setNamespaceURIs(NAMESPACE_URIS);
      toDateNode = xpath.selectSingleNode(requestDoc);
      
      return (null == toDateNode) ? "FAIL" :
toDateNode.getText();
   } /* getToDate */
   
} /* Test */



--- Michael Kay <mike@xxxxxxxxxxxx> wrote:

> > 
> > The second problem is that it does not like:
> > 
> > xqx:opType = '&lt;='
> > 
> > Is there a problem with this?  The element text
> > contains the string "&lt;=".  But the match does
> not
> > work.
> > 
> 
> &lt; is converted to < by an XML parser. Your source
> document has been
> parsed and this conversion has been done. But since
> you are submitting the
> XPath expression to DOM4J from a Java application,
> the XPath expression
> doesn't go through an XML parser, so it isn't
> converted to <. Write
> xqx:opType = '<='.
> 
> Michael Kay
> http://www.saxonica.com/
> 
> 



		
__________________________________ 
Do you Yahoo!? 
Yahoo! Mail - Find what you need with new enhanced search.
http://info.mail.yahoo.com/mail_250

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.