2012-10-23 70 views
2

如何解析如下所示的文檔?Simplexml使用內聯命名空間解析XML

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
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'> 
     <s:AttributeType name='StMovement' rs:number='1' rs:nullable='true' rs:writeunknown='true'> 
     <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='28' rs:fixedlength='true'/> 
    </s:AttributeType> 
    </s:ElementType> 
</s:Schema> 

<rs:data> 
<z:row StMovement='21123'/> 
</rs:data> 

我知道有類似.children(<schemaurl>),但這只是作品,如果有一些網址的XSD。

+1

看,撒旦就在這裏;) – Peon

回答

1

請參閱the ->children() method的文檔。命名空間標識符不必指向XSD以便以這種方式使用,您只需要知道要傳入的URI字符串。

您也可以將該方法的第二個參數設置爲true並使用命名空間的本地別名/前綴,這在理論上不太可靠,但在實踐中通常很好。

在你的情況(如果您添加</xml>,這是上面的樣本中缺少的)兩個以下將正常工作:

echo (string)$sx->children('uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882')->Schema->attributes()->id; 
echo (string)$sx->children('s', true)->Schema->attributes()->id;