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

如何在PHP中用XPath提取指定Properties标签并做SHA256哈希

在PHP中提取UBL XML的Signed Properties标签内容并计算SHA256哈希

核心实现思路

UBL格式XML通常包含多命名空间,提取目标标签需先注册对应命名空间,再通过XPath定位节点,最后对节点完整内容计算SHA256哈希。

代码示例

// 加载UBL XML文件
$xmlDoc = new DOMDocument();
// 可选:关闭空白节点保留,避免格式差异影响哈希结果
$xmlDoc->preserveWhiteSpace = false;
$xmlDoc->load('path/to/your-invoice.xml');

// 初始化XPath并注册命名空间(根据XML实际配置调整)
$xpath = new DOMXPath($xmlDoc);
// 注册数字签名命名空间(通常为http://www.w3.org/2000/09/xmldsig#)
$xpath->registerNamespace('ds', 'http://www.w3.org/2000/09/xmldsig#');

// 使用步骤4指定的XPath路径查询目标节点
$targetNodes = $xpath->query('//ds:SignedProperties');

if ($targetNodes->length > 0) {
    // 获取节点的完整XML内容(包含自身标签及所有子节点)
    $signedPropertiesContent = $xmlDoc->saveXML($targetNodes->item(0));
    
    // 计算SHA256哈希
    $sha256Result = hash('sha256', $signedPropertiesContent);
    
    // 输出结果(可根据业务需求调整处理逻辑)
    echo "提取的Signed Properties内容:\n" . $signedPropertiesContent . "\n";
    echo "SHA256哈希值: " . $sha256Result;
} else {
    echo "未找到指定的Signed Properties标签";
}

关键注意事项

  • 必须确保注册的命名空间URI与XML文件中ds前缀对应的xmlns:ds属性值完全一致,否则XPath查询会失败。
  • 替换代码中的//ds:SignedProperties为步骤4给出的精确XPath路径。
  • 若需保证同内容不同格式的XML哈希结果一致,可在加载前设置$xmlDoc->preserveWhiteSpace = false和$xmlDoc->formatOutput = false,消除空白字符差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:48:11