2011-09-28 72 views
-1

你好,這是我的第一篇文章。 我試圖解析使用PHP的XML,但我堅持我的XML它解析PHP5中的複雜XML

例如:

<xml xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
    xmlns:rs='urn:schemas-microsoft-com:rowset' 
    xmlns:z='#RowsetSchema'> 
<s:Schema id='RowsetSchema'> 
    <s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'> 
     <s:AttributeType name='ows_LinkTitle' rs:name='Phone Number*' rs:number='1'> 
     <s:datatype dt:type='string' dt:maxLength='512' /> 
     </s:AttributeType> 
     <s:AttributeType name='ows_GSM_x0020_PUK' rs:name='GSM PUK' rs:number='2'> 
     <s:datatype dt:type='string' dt:maxLength='512' /> 
     </s:AttributeType> 
    </s:ElementType> 
</s:Schema> 
<rs:data> 
    <z:row ows_LinkTitle='628558621183' ows_GSM_x0020_PUK='41016732'/> 
    <z:row ows_LinkTitle='628558621181' ows_GSM_x0020_PUK='21783670'/> 
</rs:data> 
</xml> 

我試圖從每一個「Z中獲得的價值:行' 任何幫助非常感謝。由於

我想要這個代碼,它不工作

$xml_all = simplexml_load_string($xmlnya); 

echo '<ol>'; 
foreach ($xml_all->xml->rs->z as $zrow) 
{ 
echo '<li> ows_LinkTitle: '.$zrow['ows_LinkTitle']; 
echo '</li>'; 
} 
echo '</ol>'; 
+1

你的XML格式不正確(缺少's'命名空間聲明,缺少':ElementType'結束標記,請在嘗試「解析」它之前解決該問題 – salathe

+0

*(reference)* http://php.net/manual /en/domdocument.getelementsbytagnamens.php – Gordon

+0

你可以嘗試使用SimpleXML的問題是,你的XML字符串遠未有效(沒有「S」的命名空間,一個「」不封閉)。 – Arkh

回答

2

下面的代碼片斷假設(固定的)XML文檔是$xml中的一個字符串。

的SimpleXML

$xml = simplexml_load_string($xml); 
$rows = $xml->children('rs', TRUE)->data->children('z', TRUE)->row; 
foreach ($rows as $row) { 
    $attributes = $row->attributes(); 
    $link_title = (string) $attributes->ows_LinkTitle; 
    $gsm_puk = (string) $attributes->ows_GSM_x0020_PUK; 
    var_dump($link_title, $gsm_puk); 
} 

閱讀:SimpleXML usageSimpleXMLElement::children()SimpleXMLElement::attributes()

DOM

$doc = new DOMDocument; 
$doc->loadXML($xml); 
$rows = $doc->getElementsByTagNameNS('#RowsetSchema', 'row'); 
foreach ($rows as $row) { 
    $link_title = $row->getAttribute('ows_LinkTitle'); 
    $gsm_puk = $row->getAttribute('ows_GSM_x0020_PUK'); 
    var_dump($link_title, $gsm_puk); 
} 

閱讀:DOMDocument::getElementsByTagNameNS()DOMElement::getAttribute()

+0

哇,它完美的作品。謝謝 :) – naboen

0

,當你得到你的XML固定的,你應該有一個看看simpleXML documentation並專門xpath method

+0

不會幫助OP,因爲它不說它也需要[registerXPathNamespace](http://www.php.net/manual /en/simplexmlelement.registerxpathnamespace.php)來使其工作。 – Gordon