как редактировать конкретный дочерний XML с php - PullRequest
0 голосов
/ 19 ноября 2009

это дочерний элемент xml, который я хочу динамически редактировать с помощью php

<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 голосов
/ 19 ноября 2009

, чтобы написать это используйте:

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

и чтобы проверить, существует ли существующий xVal, вам нужно взорвать этот элемент по его дочерним элементам и проверить с помощью strpos

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

если strpos возвращает что-то отличное от false (используйте ===, чтобы проверить, ложно ли это, потому что оно может вернуть 0), тогда вам нужно заменить всю эту строку. Это немного длинный код.

0 голосов
/ 19 ноября 2009

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>
0 голосов
/ 19 ноября 2009

Ну, я не знаю, если это то, что вы хотите, но это создаст строки XML, и после этого просто замените все между элементом и / item на $ xml

$xml = '';


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

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...