我决定使用XFormat Node从使用PHP的API调用中获取JSON POSTFIELDS。下面是XML数据从JSON字符串转换为XMLDocument:的结果
<root>
<salesValue>5000</salesValue>
<authorId>2</authorId>
</root>
正在从读取https://developers.flowgear.net/kb/Node:XPath_Match我想出了以下xpath获取我感兴趣的那些值,并将它们注入我的SQL查询:
- salesValue:root/salesValue
- authorId:root/authorId
我选择XML作为该属性的转义值,但不确定它应该是哪一个
(XFormat 1.0.0.1):未定义命名空间前缀"salesValue"。
我猜想问题在于我如何格式化我的xpath以获取这些值。我的XFormat节点的表达式属性中的SQL查询如下所示:
SELECT `Book`.`id` , `Book`.`name` , `Book`.`isbn` , `Book`.`quantity_in_stock` , `Book`.`price` , (`Book`.`quantity_in_stock` * `Book`.`price`) AS `sales`,
concat(`Author`.`name`, ' ', `Author`.`surname`) AS `author` FROM `books` AS `Book` LEFT JOIN authors AS `Author` ON ( `Book`.`author_id` = `Author`.`id` )
WHERE (`Book`.`quantity_in_stock` * `Book`.`price`) > {salesValue} AND `Book`.`author_id` = " {authorId}"
如果在该查询中注入这些值,我将能够继续前进。下面是我用来通过API调用WORKFLOW的脚本:
try{
$results = invokeFlowgear("https://domain.flowgear.io/authorbooksaleslist", "login", "passwrd", 30,
array(
'salesValue' => 5000.00,
'authorId' => 2
));
var_dump($results);
}catch(Exception $exc){ print $exc->getMessage(); }
提前谢谢。。。
自定义属性中的值应该只包含xpath,并且自定义属性的名称应该与表达式中的占位符匹配。
您可以在https://developers.flowgear.net/kb/Node:XFormat#Examples
Xpath中元素的地址最多可以有三部分:
- 本地名称或*(适用于所有)元素:
foo
、html
-这是必需的 - 名称空间前缀/别名:
n1:foo
,xhtml:html
-没有前缀,意味着没有名称空间 - 定义元素初始列表的轴:
children::foo
、following-sibling::xhtml:div
-默认值为children
您的XML没有命名空间。它只是成型的。因此,提供"salesValue"或"authorId"作为名称空间前缀是错误的。
从文档根目录寻址值:
/root/salesValue
/root/authorId
我认为test1:在这个例子中,链接页面只是为Xpath表达式提供一个标识符,而不是它的一部分。