Php 使用DOM或简单xml修改xml节点?

Php 使用DOM或简单xml修改xml节点?,php,xml,dom,Php,Xml,Dom,我在这里有源XML:。我想使用这个xml提要并在我自己的服务器上创建另一个修改的xml提要。我想更改包含单词Prislusenstvi的每个节点CATEGORYTEXT。我只是尝试了一些东西,但我只得到了所有类别的列表,没有更改XML:-( 这是我的代码示例。行$kategorie=“nejaka kategorie”不起作用 <?php $file = "http://www.grilykrby.cz/rss/pf-heureka.xml"; $xml=simplexml_load_fi

我在这里有源XML:。我想使用这个xml提要并在我自己的服务器上创建另一个修改的xml提要。我想更改包含单词Prislusenstvi的每个节点CATEGORYTEXT。我只是尝试了一些东西,但我只得到了所有类别的列表,没有更改XML:-( 这是我的代码示例。行$kategorie=“nejaka kategorie”不起作用

<?php
$file = "http://www.grilykrby.cz/rss/pf-heureka.xml";
$xml=simplexml_load_file($file);
foreach ($xml->xpath('//SHOPITEM/CATEGORYTEXT') as $kategorie) {
echo $kategorie."<br />";
$kategorie="nejaka kategorie";
}
file_put_contents('test.xml', $xml->asXML()); 
?>

$kategorie
只是循环中使用的一个临时变量,它包含xpath查询返回的数据副本。您需要直接在
$xml
对象中实际设置值

我个人也会考虑在XML内容本身解析成一个SimeXML对象之前,在XML内容本身中做一个<代码> StReStase或<代码> PrggExpRe/<代码>。

最终接受答案

<?php
$xml = simplexml_load_file('http://www.grilykrby.cz/rss/pf-heureka.xml');
$i=0;
foreach($xml -> SHOPITEM as $polozka) {
    if ($polozka -> CATEGORYTEXT == "Příslušenství") $xml -> SHOPITEM[$i] -> CATEGORYTEXT = "Some other text";
    $i++;
}
?>


您应该考虑使用类似XSLT的东西,它是用于处理XML文档的。XSLT可能会使您的问题变得微不足道。此外,您可以从PHP使用它,因为PHP附带XSLT处理器。我正在尝试的一切都将只替换first shopitem中的第一个categorytext:-(您需要获取密钥,以知道要修改哪个数组元素,请尝试将
foreach($xml->xpath('//SHOPITEM/CATEGORYTEXT')修改为$key=>$kategorie){
然后设置为
$xml->SHOPITEM->CATEGORYTEXT[$key]='nejaka kategorie'
或任何基于您的XML结构的项目的正确访问器。如果您在原始问题中包含
$XML
结构的变量转储,它将有助于告诉您如何访问您正在查找的节点。我想修改包含word的所有categorytext“Prislusenstvi”指向其他内容。你能帮我吗?:)请阅读我的最后一条评论。你需要确保访问的对象属性或数组成员正确(如果不了解
$xml
的结构,同样很难给出准确的说明)否则,您将一次又一次地覆盖相同的内容。这是categorytext的列表,所以我认为我访问的对象是否正确?