获取属性值 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,我想返回 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