iOS - Bir html dizesinde tüm <img> almanın en hızlı yolu?

Pek çok HTML dizgim var (google okuyucudan haberler). Çoğunlukla yapmam gereken şey, tüm img etiketlerini HTML’lerden almaktır.

Bunu bana en verimli şekilde söyleyen biri var mı?

Teşekkürler

Ayrıca, tüm etiketlerini almak hem de ne gerekiyorsa

etiketler? Tek seferde iki veya daha fazla etiket almanın en hızlı yolu?

Teşekkürler

1

3 cevap

HTML dizelerinin aslında geçerli xml olduğunu varsayarsak (yani aslında XHTML'dir), XPath'i "IMG" isminin tüm öğelerini eşleştirmek için kullanmayı düşünmelisiniz. Bu tür işleri başarıyla yapmak için bir iOS uygulamasında çeşitli C kütüphaneleri kullandım.

2
katma
@cobbal, teşekkürler. Ancak, aslında, RSS öğelerinden gelen birçok HTML'nin katı bir HTML olmadığını varsayamam. Ayrıca, bir XHTML dokümanı oluşturursam, saf tel taramasından çok daha yavaştır.
katma yazar Jackson Tale, kaynak
Rastgele RSS öğeleri yapmak için oldukça büyük bir varsayım var.
katma yazar cobbal, kaynak
Açıklığa kavuşturmak için, bu hala en iyi yöntem olabilir. xml ayrıştırıcınıza ve iyi biçimlendirilmiş veya hatalı biçimlendirilmiş HTML'yi ne kadar iyi ayrıştırdığına bağlıdır.
katma yazar cobbal, kaynak
Doğru - Sadece XHTML sayfaları için işe yarayacak ve bu onu sınırlı yapan bir fikir.
katma yazar Tim Dean, kaynak

Denemek için başka bir yaklaşım, bir NSScanner örneğini kullanmak olacaktır. HTML dizginizi htmlString adlı bir NSString'e aldığınızı varsayalım, şöyle bir şey deneyebilirsiniz:

NSScanner *scanner = [NSScanner scannerWithString:htmlString];
while ([scanner scanUpToString:@"" intoString &tagContents]) {
       //Do something with tag contents
    }
    else {
       //Do nothing? I think this would be hit on the last time through the loop
    }
}
2
katma

Libtidy + NSXMLParser uygulamasını deneyin:

 doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA)
                           error:&err];
 if (!doc) {
     doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:NSXMLDocumentTidyHTML
                           error:&err];
 }

From the doc, NSXMLDocumentTidyHTML: Formats HTML into valid XHTML during processing of the document.

Bu işe yaramazsa, HTML kaynağını bir UIWebView'e yüklemeyi ve DOM'a erişmek için javascript'i kullanmayı deneyebilirsiniz.

1
katma
Merhaba, aslında yaptığım şey bu, önce düzenli ve sonra onu ayrıştırıyorum. ama çok yavaş. Sadece bir rss öğesi için neredeyse 0,5 - 0,9 sn. (HTML'nin uzunluğu yaklaşık 2 KB - 10 KB). Bunu 50 ürün için yaparsam, yaklaşık 1 dakikadır.
katma yazar Jackson Tale, kaynak
HTML dizgisini sordun. RSS bir HTML dizesi değildir. Nesne-c RSS ayrıştırıcılarını kontrol ettiniz mi? Daha spesifik, daha hızlı, sanırım.
katma yazar djromero, kaynak
NSXMLDocument, iOS'ta mevcut değil ... emin değilsiniz
katma yazar malaba, kaynak