命名空间前缀' salesValue'未在Flowgear中定义

时间:2014-10-06 08:23:13

标签: php xml json xpath flowgear

我决定使用XFormat节点从使用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:根/ salesValue
  • AUTHORID:根/ 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(); }

提前谢谢你......

2 个答案:

答案 0 :(得分:1)

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

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

找到相关文档

答案 1 :(得分:0)

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

  1. 本地名称或*(适用于所有)元素:foohtml - 这是强制性的
  2. namepspace前缀/别名:n1:fooxhtml:html - 没有前缀,表示没有名称空间
  3. 定义元素初始列表的轴:children::foofollowing-sibling::xhtml:div - 默认为children
  4. 您的XML没有名称空间。它刚刚完好无损。因此,提供&#39; salesValue&#39;或者&#39; authorId&#39;因为名称空间前缀是错误的。

    解决文档根目录中的值:

    • /root/salesValue
    • /root/authorId

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