2013-06-18 2 views
1

Как я могу получить значение нижеследующего xml по имени атрибута.xml data по атрибуту

<list version="1.0"> 
<meta> 
<type>resource-list</type> 
</meta> 
<resources start="0" count="165"> 
<resource classname="Quote"> 
<field name="name">USD/KRW</field> 
<field name="price">1131.319946</field> 
<field name="symbol">KRW=X</field> 
<field name="ts">1371547710</field> 
<field name="type">currency</field> 
<field name="volume">0</field> 
</resource> 
<resource classname="Quote"> 
<field name="name">SILVER 1 OZ 999 NY</field> 
<field name="price">0.045962</field> 
<field name="symbol">XAG=X</field> 
<field name="ts">1371505422</field> 
<field name="type">currency</field> 
<field name="volume">7</field> 
</resource>.... 

Есть 165 таких структур

Хотите получать Silver 1 OZ 999 NY 0,045962 XAG = X 1371505422 т.д.

Мой код до сих пор идет как

$xml = simplexml_load_string($data); 

foreach($xml->children() as $resources) 
{ 
    foreach($resources->children() as $resource => $data) 
    { 
     echo $data->field['name']; 
     echo "<br>"; 
    } 


} 

ответ

1

На основе XML в комментарии должно быть:

$xml = simplexml_load_string($data); 

foreach($xml->resources->resource as $resource) 
{ 
    foreach($resource->field as $field) 
    { 
     echo $field->attributes()->name; // e.g. name, price, symbol 
     echo (string)$field; // this is the content, e.g. SILVER 1 OZ 999 NY 
    } 
} 

Отметьте, что $xml всегда содержит корневой элемент, который в этом случае равен <list>.

Demo

+0

<список версия = "1,0"> ресурсов список <ресурсы начинают = "0" Count = "165"><имя_класса ресурс = "Quote"> <имя поля = "имя"> USD/KRW <поле Name = "цена"> +1131,319946 <поле Name = "символ"> KRW = X 1371547710 имя <поле = "тип"> валюты <имя поля = "объем"> 0 <ресурс Classname = «Цитата»> SILVER 1 OZ 999 NY 0.045962 <имя поля = "символ"> XAG = X<имя поля = "ц"><имя поля = "тип"> валюта ..... –

+0

Смотрите мой выбор - я модифицирована в соответствии с что xml – MrCode

+0

Это дает мне чистый результат. Ничего не отображается на экране! Согласно вашему измененному коду. –

0

здесь вы идете.

foreach($xml->children() as $resources) 
{ 
foreach($resources->children() as $resource => $data) 
{ 
    echo $data->field['name']; 

    echo "<br>"; 
    echo $resource->attributes()->name; 

} 


} 
+0

Неустранимая ошибка: вызов функции-члена функции() для не-объекта –

0

исправленный код:

<quote> 
<name>test</name><price>567</price><symbol>xyz</symbol><ts>1371505422</ts> 
<type>currency</type> 
<volume>7</volume> 
</quote> 
$xmlObject = new SimpleXMLElement($xmlstring); 
foreach ($xmlObject->children() as $node){ 
echo $node->Company; 
echo $node->price; 
echo $node->symbol; 
echo $node->ts; 
echo $node->type; 
echo $node->volume; 
} 
0

Вы не были так далеко. Запросите элементы по их имени вместо использования children(), вам нужен только метод children() для детей, не входящих в пространство имен элементов. В своем коде вы только опрошены неправильные данные см этого примера (Demo):

$xml = simplexml_load_string($data); 

foreach($xml->resources->resource as $resource) 
{ 
    echo "---------------\n"; 
    foreach($resource->field as $field) 
    { 
     echo $field['name'], ': ', // e.g. name, price, symbol 
      $field, "\n";   // this is the content, e.g. SILVER 1 OZ 999 NY 
    } 
} 

Outout:

--------------- 
name: USD/KRW 
price: 1131.319946 
symbol: KRW=X 
ts: 1371547710 
type: currency 
volume: 0 
--------------- 
name: SILVER 1 OZ 999 NY 
price: 0.045962 
symbol: XAG=X 
ts: 1371505422 
type: currency 
volume: 7 

Это она обведен и объяснено в основных примерах использования SimpleXML, см: http://php.net/simplexml.examples-basic

+0

Что делать, если я просто хочу извлечь имя и цену? Как я должен идти. –

+0

см. Связанные примеры, а также есть xpath для этого: [Запрос Xpath с PHP (взять два значения)] (http://stackoverflow.com/questions/9293463/xpath-query-with-php-take-two -величины/9293590 # 9293590) – hakre

Смежные вопросы