PHP ve SimpleXML kullanarak XML CDATA içeriği alınıyor

4 Cevap php

Ben aşağıdaki XML yapıya sahiptir:

<?xml version="1.0" ?>
<course xml:lang="nl">
  <body>
    <item id="787900813228567" view="12000" title="0x|Beschrijving" engtitle="0x|Description"><![CDATA[Dit college leert studenten hoe ze een onderzoek kunn$
    <item id="5453116633894965" view="12000" title="0x|Onderwijsvorm" engtitle="0x|Method of instruction"><![CDATA[instructiecollege]]></item>
    <item id="7433550075448316" view="12000" title="0x|Toetsing" engtitle="0x|Examination"><![CDATA[Opdrachten/werkstuk]]></item>
    <item id="015071401858970545" view="12000" title="0x|Literatuur" engtitle="0x|Required reading"><![CDATA[Wayne C. Booth, Gregory G. Colomb, Joseph M. Wi$
    <item id="5960589172957031" view="12000" title="0x|Uitbreiding" engtitle="0x|Expansion"><![CDATA[]]></item>
    <item id="3610066867901779" view="12000" title="0x|Aansluiting" engtitle="0x|Place in study program"><![CDATA[]]></item>
    <item id="19232369892482925" view="12000" title="0x|Toegangseisen" engtitle="0x|Course requirements"><![CDATA[]]></item>
    <item id="3332396346891524" view="12000" title="0x|Doelgroep" engtitle="0x|Target audience"><![CDATA[]]></item>
    <item id="6606851872934866" view="12000" title="0x|Aanmelden bij" engtitle="0x|Enrollment at"><![CDATA[]]></item>
    <item id="1478643580820973" view="12000" title="0x|Informatie bij" engtitle="0x|Information at"><![CDATA[Docent]]></item>
    <item id="9710608434763993" view="12000" title="0x|Rooster" engtitle="0x|Schedule"><![CDATA[1e semester, maandag 15.00-17.00, zaal 1175/030]]></item>
  </body>
</course>

Ben madde etiketleri birinden verileri almak istiyorum. Bu etiket almak için, ben şu XPath'i kullanabilirsiniz:

$description = $xml->xpath("//item[@title='0x|Beschrijving']");

Bu gerçekten şeklinde bir dizi çıkmıyor:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => 787900813228567
                    [view] => 12000
                    [title] => 0x|Beschrijving
                    [engtitle] => 0x|Description
                )
        )
)

Ama nerede gerçek bilgi (bu madde etiketleri arasına saklanan) bir yer? Ben yanlış bir şey yapıyor olması gerekir, ama bu ... Muhtemelen çok basit birşey ne olabileceğini anlamaya olamaz ... Yardım mutluluk duyacağız :)

4 Cevap

XML dosyasını yüklediğinizde, CDATA işlemek gerekir .. Bu örnek çalışır:

<?php
$xml = simplexml_load_file('file.xml', NULL, LIBXML_NOCDATA);
$description = $xml->xpath("//item[@title='0x|Beschrijving']");
var_dump($description);
?>

İşte çıkış bulunuyor:

array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (2) {
    ["@attributes"]=>
    array(4) {
      ["id"]=>
      string(15) "787900813228567"
      ["view"]=>
      string(5) "12000"
      ["title"]=>
      string(15) "0x|Beschrijving"
      ["engtitle"]=>
      string(14) "0x|Description"
    }
    [0]=>
    string(41) "Dit college leert studenten hoe ze een on"
  }
}

Ben bu yüzden, nesne üzerinde __ toString () yöntemine eşdeğer inanıyorum

echo $description[0];

Bunu göstermesi gerekir, ya da bunu çevirebilirsiniz;

$str = (string) $description[0];

"SimpleXMLElement" (http://uk.php.net/manual/en/function.simplexml-element-children.php), bir dizeye düğümü dönüştürme gibi görünüyor için PHP.net belgelerine bir göz atın "(string) $ değer;" hile yok.

Bu başarısız, doğru yönde bir işaret gerektiğini sayfada örnekler bol var!

$description = $xml->xpath("//item[@title='0x|Beschrijving']");

while(list( , $node) = each($description)) {

echo($node);

}

dreamwerx çözümü iyidir