[英]PHP + XPath Query get Child Nodes and their values
我有一个XML文件record.xml看起来像:
<record>
<name>john</name>
<gender>male</gender>
<subject>mathematics, english, science</subject>
</record>
<record>
<name>jamie</name>
<gender>female</gender>
<subject>mathematics, science</subject>
</record>
<record>
<name>jack</name>
<gender>male</gender>
<subject>social-science, english</subject>
</record>
我想编写一个xpath查询,该查询将在关联数组中返回<record>
所有子nodeName和所有这些子节点的值。
例如:
对于上述XML文件,输出数组应为-
array{ [0] => array{ [name] = 'john', [gender] = 'male', [subject] = 'mathematics, english, science' } [1] => array{ [name] = 'jamie', [gender] = 'female', [subject] = 'mathematics, science' } [2] => array{ [name] = 'jack', [gender] = 'male', [subject] = 'social-science, english' } }
以下是我编写的代码的一部分,该代码返回所有<record>
子节点值,而不是其节点名称。
.......
.......
$xmldoc = new DOMDocument();
$xmldoc->load('record.xml');
$xpathvar = new Domxpath($xmldoc);
$res = $xpathvar->query('//record');
foreach($res as $data){
//$data do not contain node values
$arr[] = $data->textContent;
}
//process $arr to get required format
.....
.....
我只想要一个Xpath查询,该查询将返回子节点名称及其值。
问题是记录,因为节点只是节点层次结构的一部分。 您得到的是所有记录,但是您还想下降并从记录的子节点获取数据。 一个非常具体的案例是:
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('record.xml');
$xpathvar = new Domxpath($xmldoc);
$res = $xpathvar->query('//record');
foreach($res as $data){
$narr = [];
foreach ($data->childNodes as $cnode) {
$narr[$cnode->nodeName] = $cnode->nodeValue;
}
$arr[] = $narr;
}
print_r($arr);
应该输出类似:
Array
(
[0] => Array
(
[name] => john
[gender] => male
[subject] => mathematics, english, science
)
[1] => Array
(
[name] => jamie
[gender] => female
[subject] => mathematics, science
)
[2] => Array
(
[name] => jack
[gender] => male
[subject] => social-science, english
)
)
注意:此解决方案是针对特定情况的,如果您有其他嵌套层次结构(建议您这样做以存储多个主题),则该解决方案可能会中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.