JMeter XPath Extractor SAXException

时间:2012-07-11 21:31:50

标签: xpath jmeter jsoup

我正在使用xpath提取器从响应数据中检索表单属性值。但是,此响应数据包含字符串“C& I”等数据,这导致以下SAXException

  

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

我无法控制这些数据,因为它是从数据库中获取的。我尝试检查“使用整洁(宽容解析器)”选项。这会导致以下警告/错误

  

错误 - jmeter.util.XPathUtil:TidyException:第35行第31列 -   警告:修剪空< div>

回复第35行如下:

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

提取该属性值对于我的进一步处理至关重要。

2 个答案:

答案 0 :(得分:5)

至于解决方案的一切,它可能会很快而且很脏但是对于单个问题总有更多的解决方案。

我建议使用jsoup为您解析HTML而不是xpath提取器。我假设您正在尝试提取特定表单的动作属性。

步骤1 - &gt;将jsoup-1.6.3.jar或任何其他版本添加到JMETER_HOME\lib

步骤2 - &gt;在您的BeanShell PostProcessor HTTP或任何其他

中添加Sampler

步骤3 - &gt;在脚本大框中粘贴此代码:

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

答案 1 :(得分:1)

源文档中的迷路&在XML中不合法。从XML规范(强调我的)

  

可能会出现&符号(&amp;)和左尖括号(&lt;)   仅在用作标记分隔符时或在用于标记分隔符时以字面形式显示   注释,处理指令或CDATA部分。他们也是   在内部实体的字面实体价值内合法   宣言;见“4.3.2形成良好的解析实体”。 如果是的话   在其他地方需要,它们必须使用数字字符进行转义   引用或字符串“&amp; amp ;”和“&amp; lt ;”分别

解析器将&解释为实体引用的开头,它希望以分号结束。

来源:

请注意,您所包含的错误(几乎可以肯定)无关。 Tidy只是指出div不包含任何内容(即它是空的)。