想要设置一个页面,根据给定ID ...
从XML Feed中解析出信息例如“显示课程 - >信息,其中课程 - > ID = 123”
可能“需要”从URL变量中获取id ... urL :: //.../courseinfo.php?id = 123
这显示了每个实例 - 但我想要一个仅显示来自One particual ID的信息的解决方案。 “simialr”到一个sql查询,如“GET * where COURSE_ID =”& $ urlcourseid“
$xml=simplexml_load_file("https://www.kursadmin.org/pls/kas/sf_fu.create_web_cdata_xml");
foreach($xml as $x) {
foreach($x->KURS as $y){
echo "Kursnavn: " . $y->KURS_NAVN . "<br>";
echo "KursID: " . $y->KURS_ID . "<br><br>";
echo "Formål: " . $y->FORMAL . "<br>";
//echo "Beskrivelse: <p>" . $y->INNHOLD . "</p>";
echo "<br><br> <Hr>";
}
}
有什么建议吗?
答案 0 :(得分:0)
显而易见的方式:
foreach($xml as $x) {
foreach($x->KURS as $y){
if( $y->KURS_ID == $_GET['id']){
echo "Kursnavn: " . $y->KURS_NAVN . "<br>";
echo "KursID: " . $y->KURS_ID . "<br><br>";
echo "Formål: " . $y->FORMAL . "<br>";
//echo "Beskrivelse: <p>" . $y->INNHOLD . "</p>";
echo "<br><br> <Hr>";
}
}
}
答案 1 :(得分:0)
正如大家可能建议的那样,你应该使用XPath来查询它。他们遗漏的是你必须先考虑XML命名空间才能在这里做到。这是一种编程方式,既可以考虑命名空间,也可以查询特定的记录ID:
$xml = simplexml_load_file( "sf_fu.create_web_cdata_xml" );
$namespaces = $xml->getNamespaces( true ); # array([]="crystal-reports:schemas")
$namespace = array_shift( $namespaces ); # urn:crystal-reports:schemas
$xml->registerXPathNamespace("kurses", $namespace );
$results = $xml->xpath( "//kurses:KURS[kurses:KURS_ID=1463486771]" );
请注意,我的XPath查询以kurses:
为前缀 - 这是我指定要用于查询的命名空间前缀,XML文件反映(请参阅Report xmlns=''
标记)
无论如何,结果是一个记录数组,在我们的例子中长度为1,因为只有一个具有该数字的ID。打印出来就像你期望的那样(编辑一些细节):
print_r($results) = Array (
[0] => SimpleXMLElement Object (
[@attributes] => Array (
[SectionNumber] => 0
[teller] => 0
)
[KURSSERIE_ID] => SimpleXMLElement Object (
[@attributes] => Array (
[FieldName] => {ARRMENT_TBL.AM_ID}
)
)
[KURS_ID] => 1463486771
[KURS_NAVN] => Norsk litt øvet (A2) - Eid
[KLSTART] => 1730
鉴于记录ID#是一个整数,你应该能够通过以下方式廉价地消毒它:
$KURS_ID = intval( $_GET['KURS_ID'] );
...
$results = $xml->xpath( "//kurses:KURS[kurses:KURS_ID={$KURS_ID}]" );