Jump to content
  • 0

PHP и XML


Bolmazov
 Share

Question

В поисках возможности средствами XML редактировать файлы нашел множество различных функций, но все они для чтения данных с xml-файлов. Подскажите какими функциями можно редактировать xml-файлы?

P.S. Почему я об этом спрашиваю? Потому что PHP такой язык: вчера были одни функции, сегодня эти функции уже считаются архаичными и деревянными, завтра окажется, что задача которую ты решил в 100 строчках решается новыми функциями в 10 строк :)

Edited by Bolmazov
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Я пользуюсь классом SilmpleXML, который обычно стоит на борту любого сервера.

Этот класс упрощает работу с XML. Есть возможность изменения XML и сохранения при помощи SimpleXML->asXML().

Если нужны более мощные средства, то есть класс DOMDocument. Он, подобен браузерному DOM.

Edited by Ялекс
Link to comment
Share on other sites

  • 0

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El ActУr</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<great-lines>
<line>PHP solves all my web problems</line>
</great-lines>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;

$xml = new SimpleXMLElement($xmlstr);

$xml->movie[0]->characters->character[0]->name = 'Miss Coder';

echo $xml->asXML();

Это мы изменяем значение ноды. Если нужно изменить значение атрибута, то юзаем SimpleXMLElement->addAttribute().

file_put_contents ('file.xml', $xml->asXML());

Edited by Ялекс
Link to comment
Share on other sites

  • 0

Бьюсь над хорошим решением задачи удаления узла уже день.

Вот рабочий код, но НЕ то что мне нужно:

<?php
$xml = simplexml_load_file('sitestruct.xml');
unset($xml->page->page;);
$xml->asXML('sitestruct.xml');
?>

Нужно: имея ссылку на элемент удалить его из структуры.

К сожалению код ниже не работает правильно. Он очищает саму переменную $link а не содержимое по ссылке.

<?php
$xml = simplexml_load_file('sitestruct.xml');
$link =& $xml->page->page;
unset($link);
$xml->asXML('sitestruct.xml');
?>

Link to comment
Share on other sites

  • 0

:) Окэ, может я великий неудачник, но что-то не пошло у меня с DOM-моделями.

Подскажите кто в состоянии, как приручить вот хоть такой код:

 $domt = new DOMDocument;
$domt->loadXML('<site><page id="remove">TEST_TEXT</page></site>');
var_dump($domt->getElementById('remove'));

Почему выдает NULL ?

Edited by Bolmazov
Link to comment
Share on other sites

  • 0
For this function to work, you will need either to set some ID attributes with DOMElement::setIdAttribute or a DTD which defines an attribute to be of type ID. In the later case, you will need to validate your document with DOMDocument::validate or DOMDocument->validateOnParse before using this function.

Как ты думаешь, что это может значить ?

Не зря ведь разработчики поместили это замечание в справочнике, думаю стоит прислушаться к их словам.

Link to comment
Share on other sites

  • 0

$temp=simplexml_load_file($file);
$dom=dom_import_simplexml($temp->sitePage[2]->collection[2];
$dom->parentNode->removeChild($dom);
$putContent=$temp->asXml();
file_put_contents($file,$putContent);

удалит блок из файла с содержимым

<sitePage><collection></collection></sitePage>

<sitePage><collection></collection><collection></collection></sitePage>

Edited by elfuvo
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy