子要素が複数ある場合とない場合がある要素(名前はregion
)を持つXML文書があります。私のインポートでは、子要素が1つだけであることを確認する必要があります。より多くの子要素がある場合は、最後の要素を除くすべての子要素を削除する必要があります。次のような状況が発生する可能性がありますPHPでxPathを使用して子要素を操作する
// 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>
を私は必要なものは常に1つの子要素(value
)エーテル最後の子要素の値を持つ場合、またはを持つようにregion
要素の子要素をフォーマットし直すためにXMLをフィルタリングすることです値が 'none'の子はありません。
私の所望の出力は以下のようになります:
// For Option 1
<property name="region">
<value>none</value>
</property>
// For option 2, 3 & 4
<property name="region">
<value>Bottom</value>
</property>
私は私がXPathクエリ//property[@name = "region"]
で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
}
私は誰かが
ここで変更した
foreach
ループがあります!ありがとう! – Maurice