2017-05-18 23 views
0

こんにちは私は部屋番号と生年月日を持つユーザー情報を探したいと思います。 file_get_contentsとsimplexml_load_stringでXMLファイルをロードします。私は、URLから正常にデータを取得します。 Orginal URLのXMLデータ:xpathを使用したXMLクエリは、複数の属性を持つセクションを1つ見つけます。

<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="userinfo.xsd" generated="2013-03-22T11:16:13"> 
<userinfo> 
<BirthDate>1967-12-27</BirthDate> 
<RoomNo>111</IDNo> 
<ClientName>AAA BBB CCC</ClientName> 
</userinfo> 
<userinfo> 
<BirthDate>1970-01-01</BirthDate> 
<RoomNo>121</IDNo> 
<ClientName>DDD EEE FFF</ClientName> 
</userinfo> 
<userinfo> 

私はこのコードを試してみました:$見つかっ= $ XML->のxpath( '//のuserinfo /誕生日[(テキスト()、 "1967年12月27日" が含まれる)]とRoomNo [contains(text()、 "111")] ')[0];しかし、私は何も手に入れませんでした。

+0

エラー報告を確認してくださいことができますがオンれる作動サンプルを作成しましたあなたのXMLが不正な形式である(RoomNo/IDNOを参照してください) – Scuzzy

答えて

3

は、私はあなたのコードをクリーンアップにあるGoを持っていたし、

$string = '<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="userinfo.xsd" generated="2013-03-22T11:16:13"> 
    <userinfo> 
    <BirthDate>1967-12-27</BirthDate> 
    <RoomNo>111</RoomNo> 
    <ClientName>AAA BBB CCC</ClientName> 
    </userinfo> 
    <userinfo> 
    <BirthDate>1970-01-01</BirthDate> 
    <RoomNo>121</RoomNo> 
    <ClientName>DDD EEE FFF</ClientName> 
    </userinfo> 
</dataroot>'; 

$xml = simplexml_load_string($string); 
if($user = $xml->xpath('//userinfo[RoomNo="111" and BirthDate="1967-12-27"]')) 
{ 
    var_dump((string) $user[0]->ClientName); 
    // string(11) "AAA BBB CCC" 
} 
関連する問題