2014-01-17 17 views
1

Я пытаюсь получить attrbiute и данные из XML с помощью xPath. Я не могу получить атрибут.Значение атрибута xPath в PHP

XML:

<table:table-row> 
    <table:table-cell table:style-name="Tabella1.A2" office:value-type="string"> 
     <text:p text:style-name="Standard">RAG. SOC.:</text:p> 
    </table:table-cell> 
    <table:table-cell table:style-name="Tabella1.B2" office:value-type="string"> 
     <text:p text:style-name="Standard"> 
      <text:database-display text:table-name="portale.anaTanagrafica" text:table-type="table" text:column-name="ana_rag_sociale" text:database-name="Nuovo database">&lt;ana_rag_sociale&gt;</text:database-display> 
     </text:p> 
    </table:table-cell> 
</table:table-row> 

и PHP функция:

$path = "//text:database-display";   
if ($xml !== FALSE) { 
    foreach($xml->xpath($path) as $agenzia) { 
     FB::INFO("Nodo: " . $agenzia); 
     FB::INFO("Nodo: " . $agenzia[@"text:table-name"]); 
    } 
} 

То, что я хочу, это следующий вывод:

Nodo: &lt;ana_rag_sociale&gt; 
Nodo: portale.anaTanagrafica 

спасибо !!

+0

, пожалуйста, отправьте префикс пространства имен XML, а также – michi

ответ

1

Вы должны зарегистрировать пространство имен с SimpleXML:

$xml->registerXPathNamespace('text', 'youractualtextnamespace'); 

После того, как вы сделали это, есть несколько способов доступа к данным вы хотите. Вот полный пример:

$string = <<<XML 
<table:table-row xmlns:table="youractualnamespace" 
    xmlns:office="youractualofficenamespace" xmlns:text="youractualtextnamespace"> 
    <table:table-cell table:style-name="Tabella1.A2" 
     office:value-type="string"> 
     <text:p text:style-name="Standard">RAG. SOC.:</text:p> 
    </table:table-cell> 
    <table:table-cell table:style-name="Tabella1.B2" 
     office:value-type="string"> 
     <text:p text:style-name="Standard"> 
      <text:database-display text:table-name="portale.anaTanagrafica" 
       text:table-type="table" text:column-name="ana_rag_sociale" 
       text:database-name="Nuovo database">&lt;ana_rag_sociale&gt;</text:database-display> 
     </text:p> 
    </table:table-cell> 
</table:table-row> 
XML; 

$path = "//text:database-display"; 
$xml = new SimpleXMLElement($string); 
$xml->registerXPathNamespace('text', 'youractualtextnamespace'); 
if ($xml !== FALSE) { 
    foreach($xml->xpath($path) as $agenzia) { 
     $attr = $agenzia->xpath("@text:table-name"); 
     print("Nodo: " . $agenzia); 
     print("Nodo: " . $attr[0]); 
    } 
} 
Смежные вопросы