如何用php编辑xml的特定子代

时间:2009-11-19 14:34:55

标签: 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 = "#000000">Rating: 4.6</font>]]></item>
        <item xVal="SMR015" yVal="2.56" ><![CDATA[<font color = "#000000">Rating : 2.56</font>]]></item>        
    </items>

这里是获取数据来编辑这个孩子的PHP代码

$query  = "SELECT * FROM `set`";
$result = MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result))
{
$query2  = "SELECT * FROM `release` WHERE label_id = '" . $row['ID'] . "'";
$result2 = MYSQL_QUERY($query2);
while ($info = mysql_fetch_array ($result2))
{

//here i got all the data, now i need to edit xml here

}
}

如何动态编辑这个孩子? (我还需要编辑XVal和yVal属性)

感谢。

3 个答案:

答案 0 :(得分:0)

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

$xml = '';


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

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

}

答案 1 :(得分:0)

写它使用:

$handle = fopen('something.xml', 'w');          
fwrite($handle, $xml);
fclose($handle);

并检查是否存在现有的xVal,你需要通过它的子项目来爆炸这个项目并使用strpos进行检查

strpos($xml, 'xVal='.$info['xVal']);

如果strpos返回false以外的其他内容(使用===来检查它是否为false,因为它可以返回0),那么你需要替换整行。 这是一个有点长的代码。

答案 2 :(得分: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>