0

我是使用 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 文件,然后提取 、 等中的字符串值FIELD1FIELD2并在其他一些 WebService (SOAP) 采样器中使用它们。为了确保可以提取值,我使用了 JMeter 函数 XPath。XPath 调用如下(我正在尝试获取MyValue1),

${__XPath(c:\test.xml, /wddxPacket/data/recordset/field[@name='FIELD1']/string)}

只是为了确保文件读取部分正确,我使用该FileToString()函数并将内容分配给一个变量。根据我在调试采样器中的功能,该变量确实显示了正确的内容。但是,使用上述对 XPath 的函数调用并将结果分配给一个变量,该变量是空白的。这是我的问题,就提取 XML 文件中的值而言,我是否走错了路?如果是这样,我应该怎么做?

4

1 回答 1

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 文件不使用任何命名空间吗?因为如果确实如此,您需要在 XPaths 中明确指定它们。

于 2012-06-13T01:42:24.710 回答