0

我决定使用 XFormat 节点从使用 PHP 的 API 调用中获取我的 JSON POSTFIELDS。下面是从 JSON 字符串转换为 XMLDocument 的 XML 数据的结果:

<root>
  <salesValue>5000</salesValue>
  <authorId>2</authorId>
</root>

https://developers.flowgear.net/kb/Node:XPath_Match阅读,我想出了以下 xpath 来获取我感兴趣的值并将它们注入我的 SQL 查询:

  • 销售价值:根/销售价值
  • 作者身份:根/作者身份

我选择了 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(); }

先感谢您...

4

2 回答 2

1

自定义属性中的值应仅包含 xpath,并且自定义属性的名称应与表达式中的占位符匹配。

您可以在https://developers.flowgear.net/kb/Node:XFormat#Examples找到文档

于 2014-10-06T12:40:33.603 回答
0

Xpath 中元素的地址最多可以包含三个部分:

  1. 本地名称或 *(对于所有)元素:foo, html- 这是强制性的
  2. 命名空间前缀/别名:n1:foo, xhtml:html- 无前缀,表示无命名空间
  3. 定义初始元素列表的轴:children::foo, following-sibling::xhtml:div- 默认为children

您的 XML 没有名称空间。它只是格式良好。因此,提供“salesValue”或“authorId”作为命名空间前缀是错误的。

从文档根目录处理值:

  • /root/salesValue
  • /root/authorId

我认为 test1:在示例中,链接页面只是为 Xpath 表达式提供标识符,而不是它的一部分。

于 2014-10-06T11:41:12.773 回答