如何使用XPath进行WHERE语句? - php

我正在与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>节点中抓住/ExternalTransaction/ExternalTransactionID = $txn_id"

参考方案

首先,有两个一般注意事项:

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

接下来,要选择Transaction元素,在哪里ExternalTransaction/ExternalTransactionID = $txn_id,请使用字符串串联以形成XPath表达式,如下所示:

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

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

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

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-MySQL结果转换为JSON - php

我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…