【问题标题】:How to do a WHERE statement with XPath?如何使用 XPath 执行 WHERE 语句?
【发布时间】:2016-02-02 14:51:43
【问题描述】:

我正在与this XML 合作。这是我代码中 API 响应中的一个字符串,但我把它放在那里是为了方便查看。

您会看到它有一个 <TransactionArray> 节点,其中包含多个 <Transaction> 节点。现在我这样做是为了从 LAST 节点中获取 <TransactionID> 值,无论有多少。

$DOM = new DOMDocument();
$DOM->loadXML($string);
$XPath = new DOMXPath($DOM);
$XPath->registerNamespace("ns","urn:ebay:apis:eBLBaseComponents");

$eBayTransIDs = $XPath->query("/ns:GetItemTransactionsResponse/ns:TransactionArray/ns:Transaction/ns:TransactionID/text()");
$eBayTransIDsLength = $eBayTransIDs->length;

if($eBayTransIDsLength > 0)
    $eBayTransID = $eBayTransIDs->item($eBayTransIDsLength - 1)->data;
else
    $eBayTransID = '';

这按预期工作,在大多数情况下是最近的订单,但这不是完美的逻辑,如果两个人同时购买可能会导致问题。我需要更精确。

<Transaction> 节点内,您将看到/ExternalTransaction/ExternalTransactionID,我的代码中确实有这个值。不过,我不知道如何用 XPath 指定它。

基本上,我需要的是“抓住<Transaction> 节点WHERE /ExternalTransaction/ExternalTransactionID = $txn_id"

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

    首先,两个一般说明:

    • WHERE 子句大致映射到 [] 中的谓词。
    • 要将外部变量值注入 XPath,您可以 由连接在一起的单独字符串构造它。

    接下来,要选择 WHERE ExternalTransaction/ExternalTransactionID = $txn_idTransaction 元素,请使用字符串连接形成 XPath 表达式,如下所示:

    "//Transaction[ExternalTransaction/ExternalTransactionID = '" + $txn_id + "']"
    

    更新以添加命名空间前缀并选择所选ExternalTransactionID的字符串值:

    "string(//ns:Transaction[ns:ExternalTransaction/ns:ExternalTransactionID = '" 
            + $txn_id 
            + "'])"
    

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多