从 PHP 读取 XML+RDF 文档


Read XML+RDF document from php

我得到了这个XML示例,当手机在我的网站上浏览时,我从手机中提取了它,现在我需要从<prf:ScreenSize>320x240以及所有<rdf:li>从<prf:CcppAccept>参数中提取。

完整文件在这里: http://nds1.nds.nokia.com/uaprof/NokiaX2-01r100.xml

到目前为止,我已经尝试过了,但完全没有运气,

$RDF = file_get_contents("http://nds1.nds.nokia.com/uaprof/NokiaX2-01r100.xml");
$RDF = str_replace('rdf:', 'rdf_', $RDF);
$RDF = str_replace('prf:', 'prf_', $RDF);
$RDF = str_replace('pss6:', 'pss6_', $RDF);
$XML = simplexml_load_string($RDF);print_r($XML);
foreach ($XML->RDF_Description as $num => $description) {
  $attributes = $description->attributes();
  if (isset($attributes['prf_ScreenSize'])) {
    echo "Screen Size = {$attributes['prf_ScreenSize']}; CcppAccept =
{$attributes['rdf_li']}";
  }
}

RDF 文件:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:prf="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#" xmlns:mms="http://www.openmobilealliance.org/tech/profiles/MMS/ccppschema_mms-v1_3#" xmlns:pss6="http://www.3gpp.org/profiles/PSS/ccppschema-PSS6#">
<rdf:Description rdf:ID="Profile">
<prf:component>
<rdf:Description rdf:ID="HardwarePlatform">
<rdf:type rdf:resource="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#HardwarePlatform"/>
<prf:BluetoothProfile>
<rdf:Bag>
<rdf:li>Advanced Audio Distribution Profile</rdf:li>
<rdf:li>Dial-Up Network Profile</rdf:li>
<rdf:li>FileTransfer Profile</rdf:li>
<rdf:li>Generic Access Profile</rdf:li>
<rdf:li>Generic Object Exchange Profile</rdf:li>
<rdf:li>Hands-Free Profile</rdf:li>
<rdf:li>Headset Profile</rdf:li>
<rdf:li>Object Push Profile</rdf:li>
<rdf:li>Phonebook Access Profile</rdf:li>
<rdf:li>Serial Port Profile</rdf:li>
<rdf:li>Service Discovery Application Profile</rdf:li>
<rdf:li>SIM Access Profile</rdf:li>
<rdf:li>PAN NAP-Role</rdf:li>
</rdf:Bag>
</prf:BluetoothProfile>
<prf:BitsPerPixel>18</prf:BitsPerPixel>
<prf:ColorCapable>Yes</prf:ColorCapable>
<prf:CPU>ARM</prf:CPU>
<prf:ImageCapable>Yes</prf:ImageCapable>
<prf:InputCharSet>
<rdf:Bag>
<rdf:li>ISO-8859-1</rdf:li>
<rdf:li>ISO-10646-UCS-2</rdf:li>
<rdf:li>US-ASCII</rdf:li>
<rdf:li>UTF-8</rdf:li>
</rdf:Bag>
</prf:InputCharSet>
<prf:Keyboard>PhoneKeyPad</prf:Keyboard>
<prf:Model>Nokia X2-01</prf:Model>
<prf:NumberOfSoftKeys>3</prf:NumberOfSoftKeys>
<prf:OutputCharSet>
<rdf:Bag>
<rdf:li>ISO-8859-1</rdf:li>
<rdf:li>ISO-10646-UCS-2</rdf:li>
<rdf:li>US-ASCII</rdf:li>
<rdf:li>UTF-8</rdf:li>
</rdf:Bag>
</prf:OutputCharSet>
<prf:PixelAspectRatio>1x1</prf:PixelAspectRatio>
<prf:ScreenSize>320x240</prf:ScreenSize>
<prf:ScreenSizeChar>15x16</prf:ScreenSizeChar>
<prf:StandardFontProportional>Yes</prf:StandardFontProportional>
<prf:SoundOutputCapable>Yes</prf:SoundOutputCapable>
<prf:TextInputCapable>Yes</prf:TextInputCapable>
<prf:Vendor>Nokia</prf:Vendor>
<prf:VoiceInputCapable>Yes</prf:VoiceInputCapable>
</rdf:Description>
</prf:component>
<prf:component>
<rdf:Description rdf:ID="SoftwarePlatform">
<rdf:type rdf:resource="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#SoftwarePlatform"/>
<prf:AcceptDownloadableSoftware>Yes</prf:AcceptDownloadableSoftware>
<prf:AudioInputEncoder>
<rdf:Bag>
<rdf:li>AMR</rdf:li>
<rdf:li>EFR</rdf:li>
<rdf:li>FR</rdf:li>
</rdf:Bag>
</prf:AudioInputEncoder>
<prf:CcppAccept>
<rdf:Bag>
<rdf:li>application/java</rdf:li>
<rdf:li>application/java-archive</rdf:li>
<rdf:li>application/m3g</rdf:li>
<rdf:li>application/sdp</rdf:li>
<rdf:li>application/vnd.ms-wmdrm.lic-chlg-req</rdf:li>
<rdf:li>application/vnd.ms-wmdrm.lic-resp</rdf:li>
<rdf:li>application/vnd.ms-wmdrm.meter-chlg-req</rdf:li>
<rdf:li>application/vnd.ms-wmdrm.meter-resp</rdf:li>
<rdf:li>application/vnd.nokia.flashlite-archive</rdf:li>
<rdf:li>application/vnd.nokia.headwrap</rdf:li>
<rdf:li>application/vnd.nokia.radio-preset</rdf:li>
<rdf:li>application/vnd.nokia.ringing-tone</rdf:li>
<rdf:li>application/vnd.nok-s40theme</rdf:li>
<rdf:li>application/vnd.nokia.swupd.dp2</rdf:li>
<rdf:li>application/vnd.oma.dd+xml</rdf:li>
<rdf:li>application/vnd.oma.drm.content</rdf:li>
<rdf:li>application/vnd.oma.drm.dcf</rdf:li>
<rdf:li>application/vnd.oma.drm.message</rdf:li>
<rdf:li>application/vnd.oma.drm.rights+wbxml</rdf:li>
<rdf:li>application/vnd.oma.drm.rights+xml</rdf:li>
<rdf:li>application/vnd.oma.drm.ro+xml</rdf:li>
<rdf:li>application/vnd.oma.drm.roap-pdu+xml</rdf:li>
<rdf:li>application/vnd.oma.drm.roap-trigger+xml</rdf:li>
<rdf:li>application/vnd.syncml.dm+wbxml</rdf:li>
<rdf:li>application/vnd.syncml.notification</rdf:li>
<rdf:li>application/vnd.syncml+wbxml</rdf:li>
<rdf:li>application/vnd.syncml+xml</rdf:li>
<rdf:li>application/vnd.wap.cert-response</rdf:li>
<rdf:li>application/vnd.wap.connectivity-wbxml</rdf:li>
<rdf:li>application/vnd.wap.hashed-certificate</rdf:li>
<rdf:li>application/vnd.wap.mms-message</rdf:li>
<rdf:li>application/vnd.wap.sic</rdf:li>
<rdf:li>application/vnd.wap.signed-certificate</rdf:li>
<rdf:li>application/vnd.wap.slc</rdf:li>
<rdf:li>application/vnd.wap.wmlc</rdf:li>
<rdf:li>application/vnd.wap.wmlscriptc</rdf:li>
<rdf:li>application/vnd.wap.xhtml+xml</rdf:li>
<rdf:li>application/wml+xml</rdf:li>
<rdf:li>application/xhtml+xml</rdf:li>
<rdf:li>application/x-java-archive</rdf:li>
<rdf:li>application/x-shockwave-flash</rdf:li>
<rdf:li>application/x-wap-prov.browser-bookmarks</rdf:li>
<rdf:li>application/x-x509-ca-cert</rdf:li>
<rdf:li>audio/3gpp</rdf:li>
<rdf:li>audio/3gpp2</rdf:li>
<rdf:li>audio/aac</rdf:li>
<rdf:li>audio/amr</rdf:li>
<rdf:li>audio/amr-wb</rdf:li>
<rdf:li>audio/mid</rdf:li>
<rdf:li>audio/midi</rdf:li>
<rdf:li>audio/mobile-xmf</rdf:li>
<rdf:li>audio/mp3</rdf:li>
<rdf:li>audio/mp4</rdf:li>
<rdf:li>audio/mpeg</rdf:li>
<rdf:li>audio/sp-midi</rdf:li>
<rdf:li>audio/wav</rdf:li>
<rdf:li>audio/x-amr</rdf:li>
<rdf:li>audio/x-mid</rdf:li>
<rdf:li>audio/x-midi</rdf:li>
<rdf:li>audio/x-ms-wma</rdf:li>
<rdf:li>audio/x-wav</rdf:li>
<rdf:li>image/bmp</rdf:li>
<rdf:li>image/gif</rdf:li>
<rdf:li>image/jpeg</rdf:li>
<rdf:li>image/jpg</rdf:li>
<rdf:li>image/pjpeg</rdf:li>
<rdf:li>image/png</rdf:li>
<rdf:li>image/svg+xml</rdf:li>
<rdf:li>image/vnd.nok-oplogo-color</rdf:li>
<rdf:li>image/vnd.nok-wallpaper</rdf:li>
<rdf:li>image/vnd.wap.wbmp</rdf:li>
<rdf:li>multipart/mixed</rdf:li>
<rdf:li>text/css</rdf:li>
<rdf:li>text/ecmascript</rdf:li>
<rdf:li>text/html</rdf:li>
<rdf:li>text/plain</rdf:li>
<rdf:li>text/vnd.sun.j2me.app-descriptor</rdf:li>
<rdf:li>text/vnd.wap.co</rdf:li>
<rdf:li>text/vnd.wap.si</rdf:li>
<rdf:li>text/vnd.wap.sl</rdf:li>
<rdf:li>text/vnd.wap.wml</rdf:li>
<rdf:li>text/vnd.wap.wmlscript</rdf:li>
<rdf:li>text/x-co-desc</rdf:li>
<rdf:li>text/x-vCalendar</rdf:li>
<rdf:li>text/x-vCard</rdf:li>
<rdf:li>video/3gpp</rdf:li>
<rdf:li>video/3gpp2</rdf:li>
<rdf:li>video/mp4</rdf:li>
<rdf:li>video/vnd.rn-realvideo</rdf:li>
<rdf:li>video/x-ms-asf</rdf:li>
<rdf:li>video/x-ms-wmv</rdf:li>
</rdf:Bag>
</prf:CcppAccept>
</rdf:Description>
</prf:component>
</rdf:Description>
</rdf:RDF>
$file = file_get_contents("http://nds1.nds.nokia.com/uaprof/NokiaX2-01r100.xml");
$screen_size = explode('<prf:ScreenSize>', $file);
$screen_size = explode('</prf:ScreenSize>', $screen_size[1]);
$screen_size = $screen_size[0];
$ccpp = explode('<prf:CcppAccept>', $file);
$ccpp = explode('</prf:CcppAccept>', $ccpp[1]);
$ccpp = str_replace( 
        array("<rdf:Bag>","</rdf:Bag>","rdf:"), 
        array("<ul>","</ul>",""), $ccpp[0]);
echo $screen_size."<br/>".$ccpp;

这将起作用...不是很干净,但可以工作。

XML 区分大小写,因此我认为可能需要rdf_Description$XML->RDF_Description。如果我仍然有一个带有php的服务器,我会测试。