2014-01-17 103 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]); 
    } 
}