PHP oluşturulan iPhone ayrıştırma XML

2 Cevap php

i'm trying to parse a xml string with NSXMLParser which i created in PHP. My PHP sript is:

$doc = new DomDocument('1.0');
//$doc->preserveWhiteSpace=false;
$root = $doc->createElement("root");
$root = $doc->appendChild($root);
$child = $doc->createElement("child");
$child = $root->appendChild($child);
$value = $doc->createTextNode("testvar");
$value = $child->appendChild($value);
$xml_string = $doc->saveXML();
print $xml_string;

If i open the page in the browser it shows me 'testvar' like it should. Showing the source it shows me that there're several whitespaces:

begin ->| <?xml version="1.0"?>
<root><child>testvar</child></root>
    |<--end

Setting preserveWhitespace to false doesn't change anything. So i tried with regex in php:

$xml_string1 = preg_replace("/\s+</","<",$xml_string);
$xml_string2 = preg_replace("/>\s+/",">",$xml_string1);
print $xml_string2;

Bu \ n kaldırır ve bu beni getiren

begin-->| <?xml version="1.0"?><root><child>testvar</child></root>  |<--end

Tarayıcıda her zaman istenen sonucu gösterir: TestVar

Iphone i hata şu olsun:

**NSXMLParserErrorDomain Code = 64, Operation could not be completed.**

Xml ile sorun, i Bu \ n kaldırır altında gibi doğru şekilde almak nedir bilmiyorum ....

I tried to debug but after starting the parser with [parser parse] none of the delegate functions is called (yes, i set the delegate) exept the parserError. As there're still spaces before and after the xml may this is the reason, but i can't get them out. In my application on the iPhone i tried different encodings, UTF8 and ASCII. I also tried to convert the received data to a string, called

stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet

ve geri dönüştürülemez.

Ben de şu ayarlayın:

[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];

Ben yanlış ne yapıyorum bilmiyorum, yardım lütfen.

Şimdiden teşekkürler.

2 Cevap

Cevabınız için teşekkürler, bana doğru bir şey aramak için devam yardımcı oldu. Gerçekten ben standartlarına uygun olması gibi benim XML bildirimi silmek istemiyorum. Ben 1.5 gün israf sonra cevap buldu. PHP de benzer bir gösterim kullanır: <?php ... ?>. Nihai php ?> kapanış sınırlayıcı (ama XML) PHP isteğe bağlıdır, ve kaldırmadan istenmeyen beyaz boşluk önlemeye yardımcı olur, vb içeren, tüm PHP kod dosyaları modülleri ihmal gerektiğini unutmayın sorunlara neden olabilir dosyaların sonu. Ben, bunun farkında değildi kapatma ayracı çıkardıktan sonra gayet güzel çalışıyor.

NSXMLParser yolda geliyor bazı boşluklar var gibi görünüyor. Bunu yapacağını yapıştırdığınız kodda bir şey görmek, ama değil:

  1. bu doğrudan XML tükürerek bir PHP script? Eğer öyleyse, hiçbir boşluk sizin açılış <?php etiketi önce dosyanın başında olmasını sağlamak gerekir.

  2. Dosyanın başında sahte bir UTF-8 'sahte-BOM' olmadığını kontrol edin.

Her neyse, muhtemelen ileri kolay yolu tamamen XML Bildirgesi'ni düşmesi olacaktır. Sürece XML 1.0 ve UTF-8 kullanıyorsanız (ve hemen hemen her zaman olacaktır) gibi, XML Bildirgesi hiçbir amaca hizmet. Beyanı olmadan, belge boşluk hala iyi oluşturulmuş varlık iken başından eklemiş olabilir.

Sen saveXML için LIBXML_NOXMLDECL seçeneğini vererek bunu yapmak mümkün olmalı, ama ben şu anda çalışmıyor inanıyorum. Bunun yerine belgenin childNodes her biri için saveXML diyoruz ve çıkan dizeleri katılabilirsiniz. Yoksa, sen tutmak istediğiniz kök öğesi dışında herhangi bir yorum veya işleme talimatları yoksa ortak durumda, sadece söyleyebiliriz:

$xml_string = $doc->saveXML($doc->documentElement);