PHP - daha büyük bir XML belgesinden XML bir yığın Özü

3 Cevap php

Ben geçen hafta benzer bir soru sordum ama gerçekten çivilenmiş bir cevap alamadım. Ben soru yüzden buraya daha açıkça belirtilmesi gerekmektedir şüpheli:

Bu XML Verilen:

<?xml version="1.0" encoding="utf-8"?>
<everyone>
  <guest>
    <name>Joseph Needham</name>
    <age>53</age>
  </guest>
  <guest>
    <name>Lu Gwei-djen</name>
    <age>31</age>
  </guest>
</everyone>

Nasıl iade edebilirim tam da bu:

  <guest>
    <name>Joseph Needham</name>
    <age>53</age>
  </guest>
  <guest>
    <name>Lu Gwei-djen</name>
    <age>31</age>
  </guest>

Ben bir SimpleXML nesnenin istemiyorum, ben ... ben onun karşılık gelen başlığı ile yeni bir XML belge istemiyorum, ben düğümler sadece değerleri istemiyorsanız, bir şey dönüştürmek istemiyorum XML sadece bir yığın . Dış kütüphane kullanamazsınız ... bir standart ile gelmiyor hiçbir şey, ortalama PHP yükleyin. Nasıl diğer dışında birini ayıklamak?

Benim en iyi tahminim? Bir foreach döngü kullanarak ve her şey düzgün biçimlendirmek için satır sonları da dahil olmak üzere çeşitli düğüm adları ve değerleri üzerinden yankılanan tarafından bir şekilde ve daha sonra ne istiyorum yeniden düğümleri isim ve içerik almak için DomDocument kullanın. Bu inanılmaz aksak olabilir gibi Ancak, bu gibi görünüyor. Bunu yapmak için basit bir yol yüzden burada üzerinde stackoverflow kimse böyle ne olduğunu biliyor (ya da daha kolay bir yolu, aslında, orada değil olduğunu bana söyleyebilir) görmek istiyorsanız orada olduğunu sanıyorum. Şimdiden teşekkürler.

3 Cevap

(XPath kullanarak - Eğer konuk elemanlarının bir listesini almak için başka bir yol varsa, onu kullanabilirsiniz) Bunun gibi bir şey hile yapmak gerekir.

$xml = '';
$xpath = new DOMXPath($document);
foreach($xpath->query('//everyone/guest') as $guestNode) {
    $xml .= $document->saveXML($guestNode);
}
$reader = new XMLReader();
$reader->xml($xml_str);
$reader->read();
$inner = $reader->readInnerXML();

// $inner is your desired xml string.

XMLReader kullanmanın bir avantajı SimpleXML veya DOM sınıfları daha az bellek kullanıyor olmasıdır. Başka çok hızlı olmasıdır.

Burada 5 İlan bakınız: