如何使用php编辑xml的特定子级

如何使用php编辑xml的特定子级,php,xml,Php,Xml,这是我想用php动态编辑的xml的子项 <items> <item xVal="SMR012" yVal="3.76" ><![CDATA[<font color = "#000000">Rating: 3.76</font>]]></item> <item xVal="SMR014" yVal="4.6" ><![CDATA[<font color = "#00000

这是我想用php动态编辑的xml的子项

<items>
        <item xVal="SMR012" yVal="3.76" ><![CDATA[<font color = "#000000">Rating: 3.76</font>]]></item>
        <item xVal="SMR014" yVal="4.6" ><![CDATA[<font color = "#000000">Rating: 4.6</font>]]></item>
        <item xVal="SMR015" yVal="2.56" ><![CDATA[<font color = "#000000">Rating : 2.56</font>]]></item>        
    </items>
如何动态编辑此子项?我还需要编辑XVal和yVal属性


谢谢。

我不知道这是否是您想要的,但这将创建xml行,然后用$xml替换item和/item之间的所有内容

$xml = '';


while ($info = mysql_fetch_array ($result2))
{

   $xml .= '<item xVal="'.$info['xVal'].'" yVal="'.$info['yVal'].'" >'.$info['data'].'</item>';

}
要编写它,请使用:

$handle = fopen('something.xml', 'w');          
fwrite($handle, $xml);
fclose($handle);
要检查是否存在现有的xVal,您需要按其子项分解此项,并使用strpos进行检查

strpos($xml, 'xVal='.$info['xVal']);
如果strpos返回的不是false,而是use==检查它是否为false,因为它可以返回0,那么您需要替换整行。
代码有点长。

DOMDocument和xPath将是您最好的选择。一开始看起来有点复杂,但这比处理原始xml字符串更合适

$xml = new DOMDocument();
$xml->load('test.xml');

$xPath = new DOMXPath($xml);
$result = $xPath->query("//item[@xVal='SMR014']");
$result->item(0)->nodeValue = 'New item value';
$result->item(0)->setAttribute('xVal', 'custom xVal');
echo $xml->saveXML();
这将输出以下内容:

<?xml version="1.0"?>
<items>
        <item xVal="SMR012" yVal="3.76"><![CDATA[<font color = "#000000">Rating: 3.76</font>]]></item>
        <item xVal="custom xVal" yVal="4.6">New item value</item>
        <item xVal="SMR015" yVal="2.56"><![CDATA[<font color = "#000000">Rating : 2.56</font>]]></item>                
</items>

为什么需要编辑它?只需创建一个新的子项并将其替换为旧项。我需要对其进行编辑,因为xVal和yVal每次都会更改,并且可能会添加新项。如何将其放入xml文件中,以及如何防止重复的xVal如果它已存在于xml文件中,我需要删除旧项?谢谢你的帮助
<?xml version="1.0"?>
<items>
        <item xVal="SMR012" yVal="3.76"><![CDATA[<font color = "#000000">Rating: 3.76</font>]]></item>
        <item xVal="custom xVal" yVal="4.6">New item value</item>
        <item xVal="SMR015" yVal="2.56"><![CDATA[<font color = "#000000">Rating : 2.56</font>]]></item>                
</items>