我有一个以下结构的XML文档。
<rows pos="0" rec_count="200">
<row id="109">
<cell style="" fieldName="pid">104</cell>
<cell style="" fieldName="title">Mr.</cell>
<cell style="" fieldName="name">Vladimir</cell>
<cell style="" fieldName="projectcode">879</cell>
<cell style="" fieldName="clientstatus">1000000000</cell>
</row>
<row id="111">
<cell style="" fieldName="pid">105</cell>
<cell style="" fieldName="title">Mr.</cell>
<cell style="" fieldName="name">Barak</cell>
<cell style="" fieldName="projectcode">789/cell>
<cell style="" fieldName="clientstatus">1000000000</cell>
</row>
</rows>
现在我需要获取每一行的值到一个数组,其中每个行元素是一个关联数组,其中fieldName是上面的键,元素值是节点值。
如何使用XPath完成此操作?
我尝试了几种方法;没有人对我有用。
感谢@JeffreyBosboom,@ Makyen回复。
我最成功的是如下。
foreach ($xml->xpath('//row') as $node) {
foreach($node->cell as $cell) {
var_dump((string)$cell[0]);
}
}
有了它,我可以获得节点值。但我需要在每次迭代中提取fieldName属性
答案 0 :(得分:1)
你的意思是这样的:
$arr = array();
$s = simplexml_load_string($xml);
//First we search all the <cell> nodes within <row> nodes
foreach($s->xpath("//row/cell") as $node)
{
//For all found nodes we retrieve its ID from ancestor (<row>)
//attribute named id
$id = $node->xpath("../@id");
$id = (int)$id[0];
if(!isset($arr[$id]))
{
$arr[$id] = array();
}
//Then we iterate through all attributes of found <cell> nodes
//to find the attribute named fieldName
foreach($node->attributes() as $key=>$att)
{
if($key=='fieldName')
{
$arr[$id][(string)$att] = (string)$node;
}
}
}
//In $arr array there will be desired output
echo "<pre>";
print_r($arr);
echo "</pre>";