2015-06-28 2 views
1

С PHP Я хочу изменить значение в узле, где атрибут - это то, что я указываю. XML-файл:Значение изменения XML, где атрибут

<?xml version='1.0' standalone='yes'?> 
 
<days> 
 
<Maandag \t id="1">0</Maandag> 
 
<Dinsdag \t id="2">0</Dinsdag> 
 
<Woensdag \t id="3">0</Woensdag> 
 
<Donderdag \t id="4">0</Donderdag> 
 
<Vrijdag \t id="5">0</Vrijdag> 
 
<Zaterdag \t id="6">0</Zaterdag> 
 
<Zonday \t id="0">0</Zonday> \t 
 
</days>

Например: Сегодня понедельник так jddayofweek (0) = 1 Тогда значение узла с ID = 1 необходимо изменить, так что в конец мы получаем:

<?xml version='1.0' standalone='yes'?> 
 
<days> 
 
<Maandag \t id="1">3</Maandag> 
 
<Dinsdag \t id="2">0</Dinsdag> 
 
<Woensdag \t id="3">0</Woensdag> 
 
<Donderdag \t id="4">0</Donderdag> 
 
<Vrijdag \t id="5">0</Vrijdag> 
 
<Zaterdag \t id="6">0</Zaterdag> 
 
<Zonday \t id="0">0</Zonday> \t 
 
</days>

Как это сделать в PHP?

ответ

0

Я бы рекомендовал simpleXML, потому что это - хорошо - просто:

$xml = simplexml_load_string($x); // assume XML in $x 
$id = 1; 

$day = $xml->xpath("*[@id=`$id`]")[0]; 
$day[0] = 5; 

видеть результат:

echo $xml->asXML(); 

Комментарии:

  • xpath -выражение выберет день на $id и вернет массив из SimpleXML -элементов.
  • выберите 1-й элемент (индекс [0]) и хранить его в $day (требуется PHP> = 5,4)

видеть, что это работает: https://eval.in/388827

Думая дальнейшее

Если вы сделаете что XML, добавьте ясность и гибкость, сделав это так:

<days> 
    <day name="Maandag" id="1">0</day> 
    <day name="Dinsdag" id="2">0</day> 
    <etc /> 
</days> 
1

Вы можете изменить его, используя DOMdocument и DOMpath Просто измените имя файла xml, data.xml (2x). Набор $select и $changeTo.

<?php 

//Set your variables 
$select = 1; //id you'd like to change 
$changeTo = 3; //value you would like to change to 

//Creating a new DOMDocument 
$xmlDoc = new DOMDocument(); 

//from file 
$xmlDoc->load("data.xml"); 

//Creating a new DOMPath 
$Xpath = new DOMXPath($xmlDoc); 

//the query selects all Matches any element node (*) that have a "id" attribute with a value of $select 
$results = $Xpath->query('*[@id=' . $select . ']'); 

//Change node 
$results->item(0)->nodeValue = $changeTo; 

//Save document 
$xmlDoc->save("data.xml"); 

echo "Edited document saved!" 

?> 
-1

Если ваши файлы всегда мало и похоже содержание (например, ваш пример) вы можете preg_replace() их (или, может быть, str_replace()) ... самое лучшее решение, чтобы написать свой собственный XML-анализатор, который хороший обряд для всех программистов.

http://php.net/manual/en/book.xml.php

Смежные вопросы