使用PHP解析XML,其中Value等于XX

时间:2014-06-04 12:50:55

标签: php xml

想要设置一个页面,根据给定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>";
    }
}

有什么建议吗?

2 个答案:

答案 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}]" );