2011-09-28 74 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