Я ищу, чтобы попытаться изменить вывод XML таким образом, что структура элемента изменяется и некоторые CDATA становится attribute
, а не <element>
Изменение элемента для атрибута PHP/DOM (XML)
Учитывая XML stack.xml
:
<root>
<item>
<name>name</name>
<type>Type</type>
<dateMade>Datemade</dateMade>
<desc>Desc</desc>
</item>
....(more Items)...
</root>
Я хотел бы изменить вывод XML в stacksaved.xml
:
<root>
<item>
<name>name</name>
<Itemtype type="Type">
<Itemdate dateMade="Datemade">
<desc>Desc</desc>
</Itemdate>
<Itemtype>
</item>
....(next item)....
</root>
до сих пор мой PHP DOM выглядит л икэ это:
<?php
//create and load
$doc = new DOMDocument();
$doc->load('stack.xml');
$types=$doc->getElementsByTagName("type");
foreach ($types as $type)
{
$attribute=$doc->getElementsByTagName("type");
$doc->getElementsByTagName("type").setAttribute("$attribute");
}
$doc->save('stacksaved.xml'); //save the final results into xml file
?>
я получаю ошибку: Фатальная ошибка: Вызов неопределенной функции SetAttribute(), и документ не будет сохранен или отредактирован в любом случае. Я действительно новичок в DOM/PHP и очень ценю любые советы!
Как будет идти об изменении структуры ребенка и элемента к нужному выходу?
Спасибо как всегда за прочитанное!
EDIT: Parfait дал большое объяснение и показал большую силу XSLT, но я пытаюсь заставить его работать с использованием чистого php только как учебное упражнение для php/DOM. Может ли кто-нибудь помочь с преобразованием этого только с помощью PHP?
Не изменяйте оригинал, создайте новый целевой документ с информацией из исходного документа. Используйте 'DOMXpath :: evaluation()' для извлечения данных из исходного документа. – ThW