获取属性值 SimpleXML Xpath PHP

Get attribute values SimpleXML Xpath PHP

<RESULTS>
    <ROW>
        <COLUMN NAME="ID"><![CDATA[001]]></COLUMN>
        <COLUMN NAME="NAME"><![CDATA[ORG001]]></COLUMN>
        <COLUMN NAME="CODE"><![CDATA[1234]]></COLUMN>
    </ROW>
</RESULTS>

使用 simplexml / xpath 我想 return 'NAME' 的属性文本和 'CODE' 的 ID 001,有很多行所以结果会根据 id 不同数

编辑: 访问 CDATA 不是这里的问题,它是 returning 名称和代码的值,其中 id = 001 等

这是我试图得到的名字

echo (string)$xml->xpath('/RESULT/ROW/COLUMN[@ID] = ["001"]/COLUMN[@Name="NAME"]');

谢谢

不确定您真正想做什么。据我了解...

$xml = simplexml_load_string($x); // assuming XML in $x
$hit = (string)$xml->xpath("/RESULTS/ROW[COLUMN/@NAME='ID' and COLUMN/text() = '001']/COLUMN[@NAME='NAME']")[0];

以上代码一步一步:

  • (string) 将强制结果为字符串,而不是 object
  • xpath-expression:得到 <ROW> 和 child <COLUMN> 属性 NAME='ID' 和值 001
  • 从那个特定的 <ROW> 开始,select 一个 child <COLUMN> 属性为 NAME='NAME'
  • xpath() returns SimpleXml 个元素的数组,[0] 我们 select 它的第一个条目。
  • 请注意,此代码根本不检查是否存在匹配项。

看到它工作:https://eval.in/503464

编辑:
Re-read 问题。要获得您想要的结果,select <ROW> 然后遍历 <COLUMN>:

$hit = $xml->xpath("/RESULTS/ROW[COLUMN/@NAME='ID' and COLUMN/text() = '001']")[0];
foreach ($hit as $column)
    echo $column['NAME'] . ": " . $column . PHP_EOL;

输出:

ID: 001
NAME: ORG001
CODE: 1234

https://eval.in/503493