gpt4 book ai didi

php - 带有命名空间的 XPATH 和 XML

转载 作者:行者123 更新时间:2023-12-03 16:12:06 24 4
gpt4 key购买 nike

考虑以下 XML:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<myResponse xmlns="https://example.com/foo">
<myResult xmlns:a="https://example.com/bar" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:accountNumber>AAA</a:accountNumber>
<a:accountName>BBB</a:accountName>
<a:accountType>CCC</a:accountType>
</myResult>
</myResponse>
</s:Body>
</s:Envelope>

我试图选择 myResult 及其下面的所有元素。

我得到的最接近的是:
//*[local-name()='myResult']//a:*

这让我得到了元素的值,但我不知道哪个值属于哪个元素。

我在 PHP 中执行此操作,这里是(大致)我正在使用的代码:
<?php
$xmlObject = new SimpleXMLElement($result);
$namespaces = $xmlObject->getNamespaces(true);
foreach($namespaces as $key => $value) {
if($key == '') {
$key = 'ns';
}
$xmlObject->registerXPathNamespace($key, $value);
}
$element = $xmlObject->xpath("//myResult");
?>

我知道有很多关于 XPath 和 XML 命名空间的问题(哦,我是如何搜索的),但我没有找到与我的特定情况相匹配的问题。我想要做的甚至可能吗?

最佳答案

您的 //*[local-name()='myResult']//a:*工作正常。您只需要循环并使用 getName获取标签的名称。

$element = $xmlObject->xpath("//*[local-name()='myResult']//a:*");
foreach($element as $e){
echo $e->getName() . ': '. (string)$e;
}

演示: http://codepad.org/BAefIKZ4

编辑 : 既然要注册命名空间,为什么不使用它们呢?
$element = $xmlObject->xpath("//ns:myResult//a:*");

演示: http://codepad.org/9MKq5oDt

关于php - 带有命名空间的 XPATH 和 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com