У меня есть документ XML с элементом (с именем region
), который может содержать или не иметь несколько дочерних элементов. Для моего импорта мне нужно убедиться, что есть только один дочерний элемент. Если есть больше дочерних элементов, мне нужно удалить всех детей, кроме последнего. Следующие ситуации могут возникнуть:Манипулировать дочерние элементы с xPath в PHP
// Option 1: No child elements
<property name="region">
</property>
// Option 2: One child element
<property name="region">
<value>Bottom</value>
</property>
// Option 3: Two child elements
<property name="region">
<value>Top</value>
<value>Bottom</value>
</property>
// Option 4: Three child elements
<property name="region">
<value>Top</value>
<value>Middle</value>
<value>Bottom</value>
</property>
Что мне нужно, чтобы отфильтровать XML переформатировать дочерние элементы region
элемента всегда иметь один дочерний элемент (value
) с эфиром значение последнего дочернего элемента или если нет детей, значение «нет».
Мой желаемый результат будет следующим:
// For Option 1
<property name="region">
<value>none</value>
</property>
// For option 2, 3 & 4
<property name="region">
<value>Bottom</value>
</property>
Я знаю, что я могу выбрать region
свойство с XPATH запроса //property[@name = "region"]
, но я не знаю, как манипулировать детьми оттуда.
У меня есть следующий код, когда я застреваю
<?php
$xml = '<properties>
<property name="region">
</property>
<property name="region">
<value>Bottom</value>
</property>
<property name="region">
<value>Top</value>
<value>Bottom</value>
</property>
<property name="region">
<value>Top</value>
<value>Middle</value>
<value>Bottom</value>
</property>
</properties>';
$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
foreach($xpath->query('//property[@name = "region"]') as $node){
// Now i need something like below, but i can't find a way to make it work
if $node->hasChildren()
Remove all but last child
else
Create child element with text none
}
Я надеюсь, что кто-то может мне точку в правильном направлении
То есть именно то, что мне нужно! Благодаря! – Maurice