1

このphp関数はxmlファイルを読み取り、ノードを探してノードにコピーします。ノードに要素が 1 つしかない場合、コードはその要素を複製し、ノードに 2 回書き込みます。なぜこれが起こるのか疑問に思っています。

ここにPHPファイルがあります。

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

function backup_urls( $nodeid ) {

$dom = new DOMDocument();
$dom->load('communities.xml');

$dom->formatOutput = true; 
$dom->preserveWhiteSpace = true;

// get document element  

$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//COMMUNITY[@ID='$nodeid']"); 

if ($nodes->length) {

   $node = $nodes->item(0); 

   $xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS");

   if ($xurls->length) {

    $xurle = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS_BACKUP");
    echo "backup length: ".$xurle->length;
    if ($xurle->length) $node->removeChild($xurle->item(0));

    $xurlb = $dom->createElement("URLS_BACKUP"); 
    $node->appendChild($xurlb);

    $urldelete = $xurls->item(0);

    $xurll = $urldelete->getElementsByTagName ("URL");

    foreach($xurll as $url)
    { 
      $urlid = $url->getAttribute('ID');
      $xurl = $dom->createElement("URL");
      $xurl->setAttribute("ID", $urlid);
      $xurlb->appendChild($xurl);

      $name = $url->getElementsByTagName("NAME")->item(0)->nodeValue;
      $xuname     = $dom->createElement("NAME");
      $xunameText = $dom->createTextNode($name);
      $xuname->appendChild($xunameText);
      $xurl->appendChild($xuname);

      $urllink = $url->getElementsByTagName("URLC")->item(0)->nodeValue;
      $xulink     = $dom->createElement("URLC");
      $xulinkText = $dom->createTextNode($urllink);  
      $xulink->appendChild($xulinkText); 
      $xurl->appendChild($xulink); 

      echo "urlid: ".$urlid." name: ".$name." link: ".$urllink;
    }

    $node->removeChild($urldelete);

   }

}

$dom->save('communities.xml');
}

echo backup_urls(trim($_REQUEST['nodeid']));

以下は、php がバックアップ ノードを書き込むために読み取る XML ファイルです。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <COMMUNITIES>
    <COMMUNITY ID="c001">
      <NAME>Town Services</NAME> 
      <TOP>41</TOP> 
      <LEFT>52</LEFT> 
      <WIDTH>200</WIDTH> 
      <HEIGHT>300</HEIGHT> 
      <URLS>
          <URL ID="U001">
              <NAME>Google.com</NAME>
              <URLC>http://www.google.com</URLC>
          </URL>
          <URL ID="U002">
              <NAME>Bing.com</NAME>
              <URLC>http://www.bing.com</URLC>
          </URL>
          <URL ID="U003">
              <NAME>Yahoo.com</NAME>
              <URLC>http://www.yahoo.com</URLC>
          </URL>
          <URL ID="U004">
              <NAME>Aol.com</NAME>
              <URLC>http://www.aol.com</URLC>
          </URL>
      </URLS> 
      </COMMUNITY>
    <COMMUNITY ID="c002">
      <NAME>Local Stores</NAME> 
      <TOP>27</TOP> 
      <LEFT>270</LEFT> 
      <WIDTH>200</WIDTH> 
      <HEIGHT>150</HEIGHT> 
      <URLS>
          <URL ID="U001">
              <NAME>Walgreens</NAME>
              <URLC>http://www.walgreens.com</URLC>
          </URL>
          <URL ID="U002">
              <NAME>Bing.com</NAME>
              <URLC>http://www.bing.com</URLC>
          </URL>
          <URL ID="U003">
              <NAME>Yahoo.com</NAME>
              <URLC>http://www.yahoo.com</URLC>
          </URL>
      </URLS> 
      </COMMUNITY>
    <COMMUNITY ID="c003">
      <NAME>Attractions</NAME> 
      <TOP>50</TOP> 
      <LEFT>490</LEFT> 
      <WIDTH>200</WIDTH> 
      <HEIGHT>300</HEIGHT> 
      <URLS>
          <URL ID="U001">
              <NAME>Museum</NAME>
              <URLC>http://www.mfa.org</URLC>
          </URL>
          <URL ID="U002">
              <NAME>Park</NAME>
              <URLC>http://www.bing.com</URLC>
          </URL>
      </URLS> 
      </COMMUNITY>


    <COMMUNITY ID="c006">
      <NAME>Travel</NAME> 
      <TOP>370</TOP> 
      <LEFT>490</LEFT> 
      <WIDTH>200</WIDTH> 
      <HEIGHT>200</HEIGHT> 
      <URLS>
          <URL ID="U001">
              <NAME>Southwest</NAME>
              <URLC>http://www.mfa.org</URLC>
          </URL>
          <URL ID="U002">
              <NAME>Northwest</NAME>
              <URLC>http://www.bing.com</URLC>
          </URL>
      </URLS> 
      </COMMUNITY>
    <COMMUNITY ID="c000010">
      <NAME>New000010</NAME>
      <TOP>372</TOP>
      <LEFT>54</LEFT>
      <WIDTH>200</WIDTH>
      <HEIGHT>150</HEIGHT>
      <URLS>
        <URL ID="u000038">
        <NAME>Google.com</NAME>
        <URLC>http://google.com</URLC></URL>
      </URLS>
    </COMMUNITY>
    <COMMUNITY ID="c000011">
      <NAME>N000011</NAME>
      <TOP>370</TOP>
      <LEFT>295</LEFT>
      <WIDTH>150</WIDTH>
      <HEIGHT>150</HEIGHT>
      <URLS>
        <URL ID="u000040">
          <NAME>AOL.com</NAME>
          <URLC>http://www.aol.com</URLC>
        </URL>
      </URLS>
    </COMMUNITY>
    <COMMUNITY ID="c000002">
      <NAME>ID000002</NAME>
      <TOP>192</TOP>
      <LEFT>297</LEFT>
      <WIDTH>150</WIDTH>
      <HEIGHT>150</HEIGHT>
      <URLS>
        <URL ID="u000002">
          <NAME>Facebook.com</NAME>
          <URLC>http://www.facebook.com</URLC>
        </URL>
      </URLS>
    </COMMUNITY>
</COMMUNITIES>

ありがとう。

4

0 に答える 0