1

simplexmlを使用してxmlファイルを読み取ります。これまでのところ、探している属性値を取得できません。これは私のコードです。

          if(file_exists($xmlfile)){
              $doc = new DOMDocument();
              $doc->load($xmlfile);
              $usergroup = $doc->getElementsByTagName( "preset" );
              foreach($usergroup as $group){         
                 $pname = $group->getElementsByTagName( "name" );
                 $att = 'code';
                 $name = $pname->attributes()->$att; //not working

                 $name = $pname->getAttribute('code'); //not working
                 if($name==$preset_name){
                     echo($name);
                      $group->parentNode->removeChild($group);
                 }
              }
          }

私のxmlファイルは次のようになります

<presets>
<preset>
 <name code="default">Default</name>
  <createdBy>named</createdBy>
  <icons>somethignhere</icons>
 </preset>
</presets>
4

2 に答える 2

3

これを試して :

function getByPattern($pattern, $source)
{
    $dom = new DOMDocument();
    @$dom->loadHTML($source);

    $xpath = new DOMXPath($dom);
    $result = $xpath->evaluate($pattern);

    return $result;
}

そして、あなたはそれを(を使用して)のように使うことができますXPath

$data = getByPattern("/regions/testclass1/presets/preset",$xml);

アップデート


コード:

<?php
    $xmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><presets><preset><name code=\"default\">Default</name><createdBy>named</createdBy><icons>somethignhere</icons></preset></presets>";

    $xml = new SimpleXMLElement($xmlstr);

    $result = $xml->xpath("/presets/preset/name");

    foreach($result[0]->attributes() as $a => $b) {
        echo $a,'="',$b,"\"\n";
    }

?>

出力:

code="default"

PSまた、@TJHeuvelが述べたように回答を受け入れてみてください。それはあなたがコミュニティを尊重していることを示しています(そしてコミュニティは次回、あなたをもっと助けてくれることを嬉しく思います...)

于 2012-04-27T09:01:06.410 に答える
1

実際、私の頭の中の質問には、ノードの削除も含まれていますが、誤って追加できませんでした。したがって、私の見解では、これは完全な答えです。たとえば、他の誰かがこれが役立つと思った場合です。この回答にはSimpleXMLElementクラスは含まれていません。これは、unset()を使用してノードを削除しなかったためです。。それで、私がいたところに戻って、私はついに答えを見つけました。これは私のコードです。そしてそのシンプル!!!

if(file_exists($xmlfile)){
              $doc = new DOMDocument();
              $doc->load($xmlfile);
              $presetgroup = $doc->getElementsByTagName( "preset" );
              foreach($presetgroup as $group){       
                 $pname = $group->getElementsByTagName( "name" );
                  $pcode = $pname->item(0)->getAttribute('code');
                 if($pcode==$preset_name){
                      echo($preset_name);
                      $group->parentNode->removeChild($group);
                 }
              }
          }
        $doc->save($xmlfile);
于 2012-04-30T01:49:58.917 に答える