2011-06-30 21 views
5

Con el siguiente formato xml, ¿cómo podemos acceder al elemento News.Env de XMLReader en php?php simplexml con carácter de punto en elemento en xml

$xmlobj->News->News.Env da Env que no es correcto.

<?xml version="1.0" encoding="utf-8"?> 
<News> 
    <News.Env>abc</News.Env> 
</News> 
+0

¿Estás seguro de que usted está hablando de 'XMLReader'? Esa sintaxis se parece más a 'SimpleXML'. –

+0

sí, tienes razón ... por. – jit

Respuesta

12

Esto se debe a que el punto . es la concatenator cadena en PHP. En su caso, trata de concatenar $xmlobj->News->News (que no existe y, por lo tanto, está vacío) con la constante Env (que tampoco existe y se trata como una cadena. Debería obtener un aviso al respecto con un nivel de error apropiado)

$tmp = 'News.Env'; 
$xmlobj->News->$tmp; 

o en fin

$xmlobj->News->{'News.Env'}; 

actualización: Si utiliza SimpleXML (y según la sintaxis lo haces) de tI $xmlobj "comienza" con el News - (Raíz) Elemento.

$xmlobj->{'News.Env'}; 
+0

Si '$ xmlobj' es un' SimpleXMLElement' (y no un 'XMLReader'), la sintaxis correcta será' $ xmlobj -> {'News.Env'} 'porque' $ xmlobj' ya representa la raíz '' -nodo. –

+0

Sí, me acabo de dar cuenta. Gracias por la pista. – KingCrunch

+0

Otro problema es si el elemento comienza desde @. {@attributes} no funciona :( – jit

0

intentar algo así como

$string = <<<XML 
<?xml version="1.0" encoding="utf-8"?> 
<News> 
    <News.Env>abc</News.Env> 
</News> 
XML; 

$xml = simplexml_load_string($string); 

print_r($xml->{'News.Env'}); 
Cuestiones relacionadas