-1

xmlの要素名を取得しようとしています。getName() 関数を使用します。しかし、なぜいつもうまくいかないのかわかりません。そのページでエラーが発生します。

    $xml=filePath::$xml; //guide to the xml file

    //use simple xml to get the attributes

        $xmldoc=simplexml_load_file($xml);


        //get the children
        foreach($xmldoc->children() as $child) {

            foreach($child->attributes() as $a=>$b) {
              echo $b;//this statement works correctly

            }
            echo $child->getName();//this statement does not work, and it leads to the error.

        }

なぜ?

xml ファイルは次のようになります: ルート コレクション id="new1" スラッシュ コレクション コレクション id="new2" スラッシュ コレクション スラッシュ ルート

正しい出力は次のようになります。 new1 collection new2 collection. ただし、「コレクション」は印刷できません。

4

2 に答える 2

1

以下を確認してください。ローカルおよびリモートの XML からデータをロード、取得、および出力する方法について 2 つの例を作成しましたが、何か忘れている可能性があります。

また、XML ドキュメントの構文が 100% 正しいかどうかを確認することもお勧めします。

このツールを使用して XML を検証できます。

http://www.w3schools.com/xml/xml_validator.asp


ローカル XML の読み込み、データの取得と出力:

<?php

// xml example with namespaces
$xml = '<market 
xmlns:m="http://mymarket.com/">
<m:fruit>
  <m:type>
    <m:name from="US">Apples</m:name>
    <m:name>Bananas</m:name>
  </m:type>
  <m:sell>
    <m:date>2012-06-24</m:date>
  </m:sell>
</m:fruit>
</market>';

// load the xml
$elems = simplexml_load_string($xml);

// evaluate if not null
if($elems != null){

    // declare the namespaces
    $ns = array(
      'm' => "http://mymarket.com/"
    );

    // for each td inside tr
    foreach ($elems->children($ns['m'])->fruit->type->name as $item) {
        echo $item->attributes()->from;
        echo ',';
        echo $item;
    }

    // get just an element without using loop
    echo ','.$elems->children($ns['m'])->fruit->sell->date;

    // final output is: US,Apples,Bananas,2012-06-24 
}

?>

リモート XML の読み込み、データの取得と出力:

<?php

$url = "http://www.mymarket.com/products.xml";

// evaluate if not null
if(getXml($url) != null){

    // declare the namespaces
    $ns = array(
      'm' => "http://mymarket.com/"
    );

    // for each td inside tr
    foreach ($elems->children($ns['m'])->fruit->type->name as $item) {
        echo $item->attributes()->from;
        echo ',';
        echo $item;
    }

    // get just an element without using loop
    echo ','.$elems->children($ns['m'])->fruit->sell->date;

    // final output is: US,Apples,Bananas,2012-06-24 
}

function getXml($url)
{
    $xml = @file_get_contents($url);
    // If page not found and server has a 404 error redirection, use strpos to look through the $xml
    if($xml == false || strpos($xml,'404') == true){
        return null;
    }
    else{
        $elems = simplexml_load_string($xml);
        return $elems;
    }
}

?>
于 2012-05-18T20:41:34.570 に答える
0

xml ドキュメントは有効ですか?

スクリプトは過去のものですか

 if($xmldoc!=null)
     {

ドキュメントが有効でないため、$xmldoc null を宣言している可能性があります。

于 2012-05-18T20:18:32.377 に答える