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]