2016-10-17 6 views
1

大きなファイルを読むのに助けてくれる人はいますか?そのような 私が読んで項目SimpleXMLの大きなXMLノードを読むには

$xmlReader = new XMLReader(); 
    $xmlReader->open($path); 

    while ($xmlReader->read() && $xmlReader->name !== 'item') ; 

    while ($xmlReader->name == 'item') 
    { 
     $node = new SimpleXMLElement($xmlReader->readOuterXML()); 
     foreach($node->properties as $property) 
     { 
     var_dump($property->price); //empty class SimpleXMLElement 
     var_dump($property->attributes()); //empty class SimpleXMLElement 
     } 

     $xmlReader->next('item'); 
    } 

    $xmlReader->close(); 

ので、私が読みカント$ property->価格私は属性SKU空SimpleXMLElementクラス

同じような状況を受けているので、私受け取る空のクラスSimpleXMLElement

私はできません私が空の文字列を受け取るので、(文字列)に変換してください。

子ノードの読み込み方法は? ソースXML:

<items> 
      <item> 
       <code>be274178-9039-11e6-86d0-001e6727034e</code> 
       <delete>0</delete> 
       <title>Полотенцесушитель М-обр. 500*500 нар. р. 1" арт.00004-5050</title> 
       <category>13760cb9-8f7b-11e6-86d0-001e6727034e</category> 
       <producer>5a457cfd-b088-11e2-9c54-001e6727034e</producer> 
       <properties> 
        <property sku="40 451"> 
         <price>2831.00</price> 
         <characteristics> 
          <characteristic> 
           <title>Свойство</title> 
           <value>накопление</value> 
           <filter>0</filter> 
           <visible>0</visible> 
          </characteristic> 
          <characteristic> 
           <title>Форма</title> 
           <value>М-образный</value> 
           <filter>1</filter> 
           <visible>1</visible> 
          </characteristic> 

         </characteristics> 
        </property> 
        <property sku="40 464"> 
         <price>3442.00</price> 
         <characteristics> 
          <characteristic> 
           <title>Свойство</title> 
           <value>накопление</value> 
           <filter>0</filter> 
           <visible>0</visible> 
          </characteristic> 
         </characteristics> 
        </property> 

       </properties> 

      </item> 
     </items> 

答えて

1

それが唯一の<properties>の要素が、多くの<property>要素ですので、それは

foreach($node->properties->property as $property) 

でなければなりません。

は、PHPマニュアルでExample #4 Accessing non-unique elements in SimpleXMLを参照してください:

要素の複数のインスタンスを単一の親要素の子として存在し、通常の反復技術が適用されます。

<?php 
include 'example.php'; 

$movies = new SimpleXMLElement($xmlstr); 

/* For each <character> node, we echo a separate <name>. */ 
foreach ($movies->movie->characters->character as $character) { 
    echo $character->name, ' played by ', $character->actor, PHP_EOL; 
} 

?> 
+0

ありがとうございます。それほど明白ではない:) – Adobe

関連する問題