Author: sebb
Date: Tue Feb 13 16:34:25 2007
New Revision: 507337

URL: http://svn.apache.org/viewvc?view=rev&rev=507337
Log:
Bug 41523 - extend XPathExtractor to work with non-NodeList XPath expressions

Modified:
    
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/extractor/XPathExtractor.java

Modified: 
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/extractor/XPathExtractor.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/extractor/XPathExtractor.java?view=diff&rev=507337&r1=507336&r2=507337
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/extractor/XPathExtractor.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/extractor/XPathExtractor.java
 Tue Feb 13 16:34:25 2007
@@ -36,6 +36,7 @@
 import org.apache.jorphan.util.JMeterError;
 import org.apache.log.Logger;
 import org.apache.xpath.XPathAPI;
+import org.apache.xpath.objects.XObject;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -183,27 +184,35 @@
     private void getValuesForXPath(Document d,String query, JMeterVariables 
vars, String refName)
      throws TransformerException
     {
-       String val = null;
-               NodeList matches = XPathAPI.selectNodeList(d,query);
-               int length = matches.getLength();
-        vars.put(concat(refName,MATCH_NR), String.valueOf(length));
-        for (int i = 0 ; i < length; i++) {
-            Node match = matches.item(i);
-                       if ( match instanceof Element){
-                          // elements have empty nodeValue, but we are usually
-                          // interested in their content
-                          val = match.getFirstChild().getNodeValue();
-                       } else {                                
-                          val = match.getNodeValue();
+        String val = null;
+       XObject xObject = XPathAPI.eval(d, query);
+        if (xObject.getType() == XObject.CLASS_NODESET) {
+               NodeList matches = xObject.nodelist();
+                       int length = matches.getLength();
+               vars.put(concat(refName,MATCH_NR), String.valueOf(length));
+               for (int i = 0 ; i < length; i++) {
+                   Node match = matches.item(i);
+                               if ( match instanceof Element){
+                                  // elements have empty nodeValue, but we are 
usually
+                                  // interested in their content
+                                  val = match.getFirstChild().getNodeValue();
+                               } else {                                
+                                  val = match.getNodeValue();
+                               }
+                   if ( val!=null){
+                       if (i==0) {// Treat 1st match specially
+                           vars.put(refName,val);                    
+                       }
+                       vars.put(concat(refName,String.valueOf(i+1)),val);
+                   }
                        }
-            if ( val!=null){
-                if (i==0) {// Treat 1st match specially
-                    vars.put(refName,val);                    
-                }
-                vars.put(concat(refName,String.valueOf(i+1)),val);
-            }
-               }
-        vars.remove(concat(refName,String.valueOf(length+1)));
+               vars.remove(concat(refName,String.valueOf(length+1)));
+       } else {
+               val = xObject.toString();
+               vars.put(concat(refName, MATCH_NR), "1");
+               vars.put(refName, val);
+               vars.put(concat(refName, "1"), val);
+               vars.remove(concat(refName, "2"));
+           }
     }
-    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to