2017-05-18 8 views
0

Hallo Ich möchte Benutzerinformationen mit Zimmernummer und Geburtsdatum finden. Ich lade XML-Datei mit file_get_contents und simplexml_load_string. Ich bekomme die Daten erfolgreich von URL. Orginal URL XML-Daten:XML-Abfrage mit XPath finde einen Abschnitt mit mehreren Attributen

<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> 

Ich habe versucht, mit diesem Code: gefunden $ = $ xml-> xpath ('// userinfo/Birth [enthält (text(), "1967.12.27")] und RoomNo [enthält (text(), "111")] ') [0]; Aber ich habe nichts bekommen.

+0

Können Sie bitte die Fehlerberichterstattung aktiviert ist, Ihre XML ist falsch formatiert (siehe RoomNo/IDNo) gewährleisten, – Scuzzy

Antwort

3

ich Ihren Code gehen an Reinigung und erzeugt eine Arbeitsprobe hatte

$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" 
} 
Verwandte Themen