2012-07-11 96 views
1

我正在使用xpath提取器从响应数据中检索表单属性值。然而,该响应数据包含,其他数据字符串“C & I”之间,并且这是导致以下的SAXExceptionJMeter XPath抽取器SAXException

jmeter.extractor.XPathExtractor:的SAXException在处理 (substring-after(//form[@id='headerForm']/@action,'/dashboard.xhtml?')) 到实体“I”的参考必须以';'结尾分隔符。

我没有对这些数据的任何控制,因为它正在从数据库中获得的。我试着检查“使用Tidy(容错解析器)”选项。这导致下面的警告/错误

ERROR - jmeter.util.XPathUtil:TidyException:线35列31 - 警告:修整空<DIV>

第35行的响应是作为如下:

 
`<div style="clear: both;"></div>` 

提取该属性值对于我进一步处理是必不可少的。

回答

1

源文档中的流浪&在XML中不合法。从XML规范(重点煤矿)

与符号字符(&)和左尖括号(<)作为标记定界符只有当它们的字面形式可能会出现 ,或 注释中,处理指令或CDATA部分。它们也是 合法的内部实体的实体值 声明;请参阅“4.3.2格式良好的已分解实体”。 如果它们是其他地方需要的 ,则必须使用数字字符 或字符串“& amp;”将其转义。和“& lt;”分别为

解析器正在将&解释为实体引用的开始,它预计以分号结尾。

来源:

注意,你已经包括错误的是(几乎可以肯定)无关。 Tidy仅仅指出div不包含任何内容(即它是空的)。

5

至于一切都有解决方案,它可能是快速和肮脏的,但总是有一个单一问题的解决方案。

我推荐使用jsoup来为你解析HTML而不是xpath提取器。我假设你正试图提取特定表单的action属性。

第1步 - >添加jsoup-1.6.3.jar或任何其他版本到你JMETER_HOME\lib

第2步 - >添加BeanShell PostProcessorSampler HTTP或任何其他

第3步 - >脚本中的大盒子贴上此代码:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

String html = prev.getResponseDataAsString(); // get response from your sampler 
Document doc = Jsoup.parse(html); 
String formAction = doc.select("#headerForm").attr("action"); 
vars.put("action", formAction); 

HTML选择器是基于jQuery的。所以它可以做很漂亮的事情。无论如何,你应该有${action}变量在你的测试中进一步使用。

更新

所以你不要纠结与我创建JMeter的后处理器称为Html Extractor这里的代码是GitHub的网址:

https://github.com/c0mrade/Html-Extractor

+0

蚂蚁,谢谢大家了响应。但是,当我做prev.getRespon ....我得到的HTML不是从当前请求(流是index.xhtml-> dashboard.xhtml)。我需要从dashboard.xhtml中提取数据。我在对应于dashboard.xhtml的第二个HttpREquest下添加了JSoup代码。但是,我得到的html对应于index.xhtml。我尝试了curr.getREsponse ...但这不起作用。我在JSoup网站找不到任何帮助。你能帮我解决这个问题吗? Thx,Karthik – Karthik 2012-07-12 16:12:54

+0

您是否正在从名为dashboard.xhtml的文件中读取数据?你能否用更多的信息来更新你的问题,比如正确的结构,测试流程,截图等等。当所有内容都放在一个句子中时很难理解 – ant 2012-07-13 08:57:01