You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP XPath解析SOAP请求:筛选NumType为HI的NumInfo节点

解决SOAP请求中提取特定NumInfo节点的问题

没问题,我来帮你搞定这个XPath查询的事儿!结合你提供的代码片段,我们只需要调整XPath表达式,就能精准筛选出NumType属性为HI的NumInfo节点,再提取你需要的字段值。

正确的XPath表达式

因为你的XML使用了bms命名空间(http://www.cieca.com/BMS),所以所有节点引用都得带上这个前缀。针对需求的XPath应该是:

//bms:NumInfo[@NumType='HI']
  • //:表示从XML文档的任意位置查找匹配的节点
  • bms:NumInfo:指定要找的目标节点(带上命名空间前缀)
  • [@NumType='HI']:筛选出NumType属性值等于HI的节点

完整代码示例

把这个XPath放到你的代码里,再加上遍历提取字段的逻辑,完整代码如下:

$xml = simplexml_load_file('RequestExample.xml');
$xml->registerXPathNamespace("bms", "http://www.cieca.com/BMS");

// 执行XPath查询,获取符合条件的节点
$numInfoNodes = $xml->xpath("//bms:NumInfo[@NumType='HI']");

// 遍历节点,提取需要的字段
foreach ($numInfoNodes as $node) {
    // 提取基础字段,强制转为字符串避免对象引用问题
    $type = (string)$node->Type;
    $num = (string)$node->Num;
    $desc = (string)$node->Desc;
    $quantity = (string)$node->Quantity;
    
    // 处理PriceInfo字段:如果是复杂子节点,按需提取子元素
    // 示例:假设PriceInfo下有Amount子节点
    $priceAmount = (string)$node->PriceInfo->Amount;
    // 如果PriceInfo是纯文本节点,直接用 (string)$node->PriceInfo 即可
    
    // 输出或处理提取到的数据
    echo "Type: $type\n";
    echo "Num: $num\n";
    echo "Desc: $desc\n";
    echo "Quantity: $quantity\n";
    echo "Price Amount: $priceAmount\n\n";
}

小提示

  • 必须用(string)强制转换SimpleXMLElement对象为字符串,不然直接输出会得到对象引用而非实际文本值
  • 如果你的SOAP请求体是字符串而非文件,把simplexml_load_file换成simplexml_load_string($soapRequestBody)即可

内容的提问来源于stack exchange,提问作者MB34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:38