2014-01-17 109 views
1

我尝试使用xPath从XML获取属性和数据。 我不能'获取属性。PHP中的xPath属性值

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]); 
    } 
}