0

特定の子が空の場合にノード ツリーを削除できるようにしたいのですが、何か問題があるようです。

これが私が得たものです:

$xml = new DOMDocument();
$xml->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <game id="1">
    <opponent>Michael</opponent>
    <oppid>1</oppid>
  </game>
  <game id="2">
    <opponent>Trish</opponent>
    <oppid>55</oppid>
  </game>
  <game id="3">
    <opponent/>
    <oppid>24</oppid>
  </game>
  <game id="4">
    <opponent>Betty</opponent>
    <oppid>12</oppid>
  </game>
</data>

');

echo "<xmp>OLD \n". $xml->saveXML() ."</xmp>";

$xpath = new DOMXpath($xml);
foreach($xpath->query('//game') as $node) {
    if($node->opponent == ''){
        echo 'Test<br>';
        $node->parentNode->removeChild($node);
    }

}

echo "<xmp>NEW \n". $xml->saveXML() ."</xmp>";

4 つの「テスト」が出力され、新しい xmp では何も表示されないのですか? 私は何を間違っていますか?

助けてください、事前に感謝します。

4

2 に答える 2

0

if条件を次のように変更します。

if($node->opponent->nodeValue == '')
于 2012-09-18T09:01:45.610 に答える
0
<?php
$xml = new DOMDocument();
$xml->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<game id="1">
    <opponent>Michael</opponent>
    <oppid>1</oppid>
</game>
<game id="2">
    <opponent>Trish</opponent>
    <oppid>55</oppid>
</game>
<game id="3">
    <opponent/>
    <oppid>24</oppid>
</game>
<game id="4">
    <opponent>Betty</opponent>
    <oppid>12</oppid>
</game>
</data>

');

echo "<xmp>OLD \n". $xml->saveXML() ."</xmp>";

$opNodes = $xml->getElementsByTagName('opponent');
foreach($opNodes as $node) {
    $innerHtml = trim($node->nodeValue);
    if(empty($innerHtml)){
        $gameNode = $node->parentNode;
        $gameNode->parentNode->removeChild($gameNode);
    }
}

echo "<xmp>NEW \n". $xml->saveXML() ."</xmp>";

なぜ機能しなかったのだろうか...今は機能します。

于 2012-09-18T09:13:18.150 に答える