我需要的是在xml Feed中搜索某个值,并根据此值更改兄弟的值。
我有这样的结构
<properties>
<property name="sport">
<value>Football</value>
</property>
<property name="player">
<value>Lionel Messi</value>
</property>
<property name="nationality">
<value>Argentine</value>
</property>
<property name="club">
<value>FC Barcelona</value>
</property>
<property name="position">
<value>Forward</value>
</property>
</properties>
现在我知道某些值可能不正确或不一致,所以我创建了一个带有更正的数组,如下所示:
$position_replacements = Array(
'Lionel Messi' => 'Center forward',
);
我认为这样的事情应该有效,但不知怎的,我不知道为什么......
$xml_src = 'players.xml';
$document = new DOMDocument();
$document->load($xml_src);
$xpath = new DOMXpath($document);
foreach($xpath->query('//property[@name="player"]') as $node){
if(array_key_exists(trim($node->nodeValue), $position_replacements)){
$target = $xpath->query('following-sibling::property[@name="position"]/value/text()', $node);
$target->parentNode->replaceChild(
$document->createTextNode($position_replacements[trim($node->textContent)]),
$target
);
}
}
到目前为止,我知道问题出在$target
查询中,但我不知道解决此问题的方法。我做错了什么?
我刚回来了一个空白页
答案 0 :(得分:0)
夜间睡眠为我提供了解决问题的见解。我忘了选择te项目,所以有效的代码是
$xml_src = 'players.xml';
$document = new DOMDocument();
$document->load($xml_src);
$xpath = new DOMXpath($document);
foreach($xpath->query('//property[@name="player"]') as $node){
if(array_key_exists(trim($node->nodeValue), $position_replacements)){
$target = $xpath->query(
'following-sibling::property/value/text()',
$node->parentNode
)->item(3);
$target->parentNode->replaceChild(
$document->createTextNode($position_replacements[trim($node->textContent)]),
$target
);
}
}