<RESULTS>
<ROW>
<COLUMN NAME="ID"><![CDATA[001]]></COLUMN>
<COLUMN NAME="NAME"><![CDATA[ORG001]]></COLUMN>
<COLUMN NAME="CODE"><![CDATA[1234]]></COLUMN>
</ROW>
</RESULTS>
使用 simplexml/xpath,我想返回 ID 001 的"NAME"和"CODE"的属性文本,有很多行,因此结果会根据 ID 号而有所不同
编辑:访问 CDATA 不是这里的问题,它返回名称和代码的值,其中 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)
将强制结果为字符串,而不是对象 - XPath-expression:使用属性
NAME='ID'
且值为001
的子<COLUMN>
获取<ROW>
- 从该特定
<ROW>
开始,选择属性为NAME='NAME'
的子<COLUMN>
-
xpath()
返回一个SimpleXml
元素数组,通过[0]
我们选择它的第一个条目。 - 请注意,此代码缺少检查是否存在匹配项。
看到它工作:https://eval.in/503464
编辑:
重新阅读问题。若要获得所需的结果,请选择<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