2013-08-14 3 views
0

У меня есть этот XML:как получить XML-тег по имени

<InternalData> 
    <DataSet> 
     <Table> 
      <Expire_x0>2050-12-12T00:00:00+02:00</Expire_x0> 
     </Table> 
    </DataSet> 
</InternalData> 

Как получить значение <Expire_x0> тега? Я попытался это:

$result = $s->__call("XmlString",array($params)); 
$obj_pros = get_object_vars($result); 
$xml = $obj_pros['XmlStringResult']; 
$xml = simplexml_load_string($xml); 
$x = $xml->getElementsByTagName("Expire_x0"); 
echo $x; 

без успеха. Что не так?

+0

Возможный дублирующий вопрос можно найти здесь [http://stackoverflow.com/questions/7236047/how-do-create-variables-from-xml-data-in-php) – KarelG

ответ

2

Либо:

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$expiresx0 = $dom->getElementsByTagName('Expire_x0'); 
foreach ($expiresx0 as $expirex0) { 
    echo $expirex0->nodeValue, PHP_EOL; 
} 

http://php.net/manual/de/domdocument.getelementsbytagname.php

Или:

$xml = simplexml_load_string(xml); 
echo $xml->DataSet->Table->Expire_x0; 

http://php.net/manual/de/function.simplexml-load-file.php

Похоже, вы смешано оба.

+0

Неправда. 'InternalData' - это root, пожалуйста,' var_dump ($ xml); ' – Bora

+1

Теперь вернее! – Bora

+0

Вы правы с InternalData (изменили его), но вопрос «echo» был в вопросе, поэтому я оставляю эхо здесь (var_dump не будет отличать simpleXmlObjects к строке ...) –

2

Если я правильно понял, вы хотите получить значение тега <Expire_x0>, для которого вы можете использовать этот код.

$xml = simple_xml_load_string($xml); //Load XML String 
$xml = json_decode(json_encode($xml), true); //Convert to Standard PHP Array 
$expire = $xml['InternalData']['DataSet']['Table']['Expire_x0']; //Find Tag Value 
-1

Вы должны использовать как:

$xml = simplexml_load_string($xml); 
echo $xml->DataSet->Table->Expire_x0; 

Не используйте корневой тег InternalData

+0

спасибо. должен ли я всегда пропускать корневой тег? – Roi

+0

Да и вы можете получить имя корня с помощью '$ xml-> getName();' – Bora

+0

Почему ниспровергаемый кто? Вы можете попробовать .. И если вы занижены, оставьте комментарий, почему не полезно! – Bora

0

попробовать этот

<?php 
$k = '<InternalData> 
    <DataSet> 
     <Table> 
      <Expire_x0>2050-12-12T00:00:00+02:00</Expire_x0> 
     </Table> 
    </DataSet> 
</InternalData>'; 
$xml = simplexml_load_string($k); 
    echo $xml->DataSet->Table->Expire_x0; 
} 

Выходной

2050-12-12T00:00:00+02:00 
0

Так много способов ...

Какой из них предпочтительнее? это лучше использовать:

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$expiresx0 = $dom->getElementsByTagName('Expire_x0'); 

или:

$xml2 = simplexml_load_string($xml); 

$xml2 = json_decode(json_encode($xml2), true); 

$expire = $xml2['DataSet']['Table']['Expire_x0']; 

или, может быть:

$xml1 = simplexml_load_string($xml); 
$x = $xml1->DataSet[0]->Table[0]->Expire_x0; 
echo $x; 

?

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