xsl-list
[Top] [All Lists]

RE: XPath problem

2005-01-27 16:15:32
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(_at_)saxonica(_dot_)com> 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/



--~------------------------------------------------------------------
XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:
http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>