我是使用XPath和JMeter的新手。我有一个包含wddx数据包的XML文件。以下是示例文件。实际数据一次最多可包含100条记录。
<wddxPacket version='1'>
<header/>
<data>
<recordset rowCount='2' fieldNames='FIELD1, FIELD2' type='coldfusion.sql.QueryTable'>
<field name='FIELD1'>
<string>MyValue1</string>
<string>MyValue2</string>
</field>
<field name='FIELD2'>
<string>MyValue3</string>
<string>MyValue4</string>
</field>
</recordset>
</data>
</wddxPacket>
我需要做的是根据recordset
标记中指定的行数循环遍历XML文件,然后在FIELD1
,FIELD2
等中提取字符串值。并在其他一些WebService(SOAP)采样器中使用它们。为了确保我可以提取值,我使用的是JMeter函数XPath。 XPath调用如下(我试图获得MyValue1
),
${__XPath(c:\test.xml, /wddxPacket/data/recordset/field[@name='FIELD1']/string)}
为了确保文件读取部分正确,我使用FileToString()
函数并将内容分配给变量。根据我在Debug Sampler中的功能,该变量确实显示了正确的内容。但是,使用上面的函数调用XPath并将结果赋给变量,该变量为空。以下是我的问题,就提取XML文件中的值而言,我是否会走错路?如果是这样,我该怎么办呢?
答案 0 :(得分:1)
我不知道JMeter,但是这个XPath
/wddxPacket/data/recordset/field[@name='FIELD1']/string
不返回字符串值,它返回包含两个节点的节点集
<string>MyValue1</string>
<string>MyValue2</string>
如果您只想要第一个节点,则可以使用此XPath:
/wddxPacket/data/recordset/field[@name='FIELD1']/string[1]
如果你只想要第一个字符串值,你可以试试这个XPath:
string(/wddxPacket/data/recordset/field[@name='FIELD1']/string)
最后但并非最不重要的:您确定您的XML文件不使用任何命名空间吗?因为如果是,您需要在XPath中明确指定它们。