Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение значения узла не лету 
V
    Опции темы
armor85
Дата 7.4.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злой программер
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2007
Где: Сочи, блин!

Репутация: нет
Всего: -1



Здравствуйте,

есть xml файл

Код

<building>
    <object>
        <ID>41</ID>
        <class>Elite</class>
        <price>1900</price>
        <floor>6</floor>
    </object>
    <object>
        <ID>40</ID>
        <class> Business</class>
        <price>1200</price>
        <floor>5</floor>
    </object>
</building>


он загружается динамически php скриптом,

Код

<?
header("Content-Type: text/xml"); 
$doc = new DOMDocument('1.0', 'windows-1251');
$doc->load('test.xml');
echo $doc->saveXML();
?>


как мне до вывода этого файла, поле <price> во всех узлах умножить на 100?


PM MAIL   Вверх
mishaSL
Дата 7.4.2008, 16:04 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 54



К примеру так:
Код

<?php

$xml = <<<XML
<building>
    <object>
        <ID>41</ID>
        <class>Elite</class>
        <price>1900</price>
        <floor>6</floor>
    </object>
    <object>
        <ID>40</ID>
        <class> Business</class>
        <price>1200</price>
        <floor>5</floor>
    </object>
</building>
XML;

header("Content-Type: text/xml"); 
$doc = new DOMDocument('1.0', 'windows-1251');
$doc->loadXML($xml);
$listPrices = $doc->getElementsByTagName('price');
foreach($listPrices as $price) {
    $price->nodeValue = intval($price->nodeValue)*100;
}
echo $doc->saveXML();

?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
armor85
Дата 16.4.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злой программер
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2007
Где: Сочи, блин!

Репутация: нет
Всего: -1



а если например все поля с одинаковыми именами 

Код

<building>
    <object>
        <cell>41</cell>
        <cell>Elite</cell>
        <cell type="edit">1900</cell>
        <cell>6</cell>
    </object>
    <object>
        <cell>40</cell>
        <cell> Business</cell>
        <cell type="edit">1200</cell>
        <cell>5</cell>
    </object>
</building>


как добраться до того, которое с параметром "type"?

Это сообщение отредактировал(а) armor85 - 16.4.2008, 16:22
PM MAIL   Вверх
mishaSL
Дата 18.4.2008, 10:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 54



armor85, самый простой вариант на мой взгляд с помощью XPath:
Код

<?php
$xml = <<<XML
<building>
    <object>
        <cell>41</cell>
        <cell>Elite</cell>
        <cell type="edit">1900</cell>
        <cell>6</cell>
    </object>
    <object>
        <cell>40</cell>
        <cell> Business</cell>
        <cell type="edit">1200</cell>
        <cell>5</cell>
    </object>
</building>
XML;
header("Content-Type: text/xml"); 
$doc = new DOMDocument('1.0', 'windows-1251');
$doc->loadXML($xml);
$objXpath = new DOMXPath($doc);
$listPrices   = $objXpath->query('/building/object/cell[@type="edit"]');
if ($listPrices->length != 0) {
    foreach($listPrices as $price) {
        $price->nodeValue = intval($price->nodeValue)*100;
    }
}

echo $doc->saveXML();
?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
armor85
Дата 18.4.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злой программер
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2007
Где: Сочи, блин!

Репутация: нет
Всего: -1



ОГРОМНОЕ спасибо!   smile 
PM MAIL   Вверх
eee
Дата 27.10.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 14.4.2008
Где: ХарьковCity

Репутация: нет
Всего: 1



mishaSL, не могу понять почему у меня пишет такое?
Код

Warning: Cannot modify header information - headers already sent by (output started at /var/www/.../fuck_xml.php:1) in /var/www/.../fuck_xml.php on line 62

Warning: domdocument() expects parameter 2 to be long, string given in /var/www/.../fuck_xml.php on line 63

Fatal error: Call to undefined function: loadxml() in /var/www/.../fuck_xml.php on line 64

ну с заголовком то понятно что-то уже вывелось, ито не понятно что))

ну а со слишком «длинным параметром» и не найденной loadxm() вообще неясно, тем более что на php.net написано что никаких установок не требуется, т.к. DOMDocument() есть часть ядра)

привожу код, хотя он абсолютно идентичен:
Код

<?php

$xml = <<<XML
<building>
    <object>
        <ID>41</ID>
        <class>Elite</class>
        <price>1900</price>
        <floor>6</floor>
    </object>
    <object>
        <ID>40</ID>
        <class> Business</class>
        <price>1200</price>
        <floor>5</floor>
    </object>
</building>
XML;

header("Content-Type: text/xml");
$doc = new DOMDocument('1.0', 'windows-1251');
$doc->loadXML($xml);
$listPrices = $doc->getElementsByTagName('price');
foreach($listPrices as $price) {javascript: sendForm('submit');
    $price->nodeValue = intval($price->nodeValue)*100;
}
echo $doc->saveXML();

?>

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0889 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.