PHP, найдите элемент XML и сделайте с ним что-нибудь - PullRequest
0 голосов
/ 20 апреля 2020

У меня возникла следующая проблема, у меня есть импорт. xml с примером содержимого, например

<abc></abc>
<lable_def name="Label" x="100" y="200" z="300"></label_def>
<abcd></abcd>
....
...

Теперь я хочу следующее:

if the tag is = <lable_def name"Label" 
than delete X and Y Tags
and value of Z minus 6
and add the tag haschanged="1"

Весь XML должен быть сохранен как новый. xml со всем исходным содержимым, но с измененными вещами, такими как:

<abc></abc>
<lable_def name="Label" z="294" haschanged="1"></label_def>
<abcd></abcd>
....
...

Как мне решить эту проблему с помощью PHP?

Best желает и остается в безопасности

1 Ответ

1 голос
/ 20 апреля 2020

Используя один из XML API, таких как DOM. Выражения Xpath позволяют извлекать части DOM.

$xml = <<<'XML'
<foo>
<abc></abc>
<label_def name="Label" x="100" y="200" z="300"></label_def>
<abcd></abcd>
</foo>
XML;

// bootstrap the DOM document
$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

// find any element "label_def" with the "name" attribute "Label"
foreach ($xpath->evaluate('//label_def[@name="Label"]') as $label) {
   // remove x and y attributes
   $label->removeAttribute('x');
   $label->removeAttribute('y');
   // decrease z attribute
   $label->setAttribute('z', $label->getAttribute('z') - 6);
   // add haschanged attribute 
   $label->setAttribute('haschanged', '1');
}

echo $document->saveXML();

Вывод:

<?xml version="1.0"?>
<foo>
<abc/>
<label_def name="Label" z="294" haschanged="1"/>
<abcd/>
</foo>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...