Aynı düğüm altında cdata ile oğul karıştırma.

2 Cevap php

Ben (harici web hizmetinden geliyor) aşağıdaki xml belgesini ayrıştırmak gerekiyor:

...
<dati>
    <Riconoscimento>
        <IdentificativoPosizione>xxxx</IdentificativoPosizione>
        <OutputRestituiti>xxx</OutputRestituiti>
    </Riconoscimento>
    <![CDATA[text text text]]>
</dati>    
...

Sorun düğümü kalmayıncaya kadar "riconoscimento" SimpleXML ayrıştırıcı ben bu çocuğu kaldırırsanız, her şey sorunsuz çalışıyor, CDATA bölümü okumak için başarısız olduğunu.

Geçerli bir xml belgesi olduğunu ve geçerli ise elle ekstra oğul çıkarmadan php ile CDATA bölümü erişmek için bir yol var: O ana soru?

Şimdiden teşekkürler.

2 Cevap

Böyle alabilirsiniz:

$x = simplexml_load_string('<root><dati>
    <Riconoscimento>
        <IdentificativoPosizione>xxxx</IdentificativoPosizione>
        <OutputRestituiti>xxx</OutputRestituiti>
    </Riconoscimento>
    <![CDATA[text text text]]>
</dati></root>', 'SimpleXMLElement', LIBXML_NOCDATA);

var_dump((string)$x->dati);

Bir metin düğümü için CDATA dönüştürmek için LIBXML_NOCDATA parametresini unutmayın.

Öncelikle: Bu geçerli bir XML belgesi (here bakınız).

Definition: CDATA sections may occur anywhere character data may occur; they are used to escape blocks of text containing characters which would otherwise be recognized as markup. CDATA sections begin with the string " <![CDATA[ " and end with the string " ]]> ":

Senin durumunda <data/>-eleman karışık bir içerik unsurdur.

$xmlString = <<<XML
<dati>
    <Riconoscimento>
        <IdentificativoPosizione>xxxx</IdentificativoPosizione>
        <OutputRestituiti>xxx</OutputRestituiti>
    </Riconoscimento>
    <![CDATA[text text text]]>
</dati>
XML;
$xml = simplexml_load_string($xmlString);
var_dump((string)$xml);

/*
 * outputs:
 * string(37) "
 *
 *        text text text
 *    "
 */

(LIBXML_NOCDATA geçmesine gerek yoktur)