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


Namespace prefix 'salesValue' is not defined in Flowgear

我决定使用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中元素的地址最多可以有三部分:

  1. 本地名称或*(适用于所有)元素:foohtml-这是必需的
  2. 名称空间前缀/别名:n1:fooxhtml:html-没有前缀,意味着没有名称空间
  3. 定义元素初始列表的轴:children::foofollowing-sibling::xhtml:div-默认值为children

您的XML没有命名空间。它只是成型的。因此,提供"salesValue"或"authorId"作为名称空间前缀是错误的。

从文档根目录寻址值:

  • /root/salesValue
  • /root/authorId

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