PHP XML 使用命名空间从父级获取子变量

标签 php xml namespaces

我如何获得 a b c d e 从下面的xml标记...

<api:field name="test">
    <api:text>a</api:text>
    <api:text>b</api:text>
    <api:text>c</api:text>
    <api:text>d</api:text>
    <api:text>e</api:text>
</api:field>

我正在尝试使用这个 for 循环:
foreach ($xml->xpath('//api:field[@name="test"]') as $item)
{
    foreach ($item->children() as $child) {
        ...
    }
}

但我不知道如何访问不包含属性的子节点。

我需要专门为父节点“测试”获取子值,所以请不要给我 $xml->xpath("//api:text"); 作为答案。这个答案的问题在于我们可能会看到 在其他父节点下,我只想从特定父节点获取子值。在这种情况下 名称="测试" .

最佳答案

有几种方法可以实现这一点。要么扩展您的 xpath 表达式以返回子节点本身:

foreach ($sxml->xpath('/api:field[@name="test"]/api:text') as $item) {
    echo (string) $item, PHP_EOL;
}

或者,如果您确实想使用两个循环(或者它只是更适合您的用例),则只需将命名空间前缀传递给 children() 方法:
foreach ($sxml->xpath('/api:field[@name="test"]') as $item) {
    foreach ($item->children('api', true) as $child) {
        echo (string) $child, PHP_EOL;
    }
}

(如果命名空间前缀可能会发生变化,您可以使用 registerXPathNamespace 方法根据定义的命名空间 URL 注册一个持久的。)

这两种方法都会产生相同的结果:

a
b
c
d
e



有关完整示例,请参阅 https://eval.in/954569

关于PHP XML 使用命名空间从父级获取子变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48742775/

相关文章:

php - 如何互连 Node.js 应用程序服务器和 LAMP 堆栈?

php - fatal error : Cannot use object of type mysqli_result as array in. ..第 97 行

xml - XPath 查询以选择没有特定属性的特定值的任何后代

php - Zend Framework 切换到本地命名空间

JavaScript 窗口命名空间 - 我可以深入了解一下它在做什么吗?

C++ "::"没有类名

php - 尝试将旧的 mysql_query 转换为新的 PDO 方法,如何创建变量元素

javascript - 为什么单击按钮时会运行两个函数而不是一个?

php - 使用带有 php XML 函数的 CURL 输出来处理大数据提要

c# - 比较两个 XML 文件并显示它们之间的差异并更新文件