php xpath перебирает внутренние узлы, получает значения на основе определенных атрибутов

У меня есть документ 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, извлеченный в каждой итерации

-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>";

?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]