如何使用 TouchXML 或其他库在 iPhone 上解析 HTML?

发布于 2024-12-10 18:58:30 字数 4124 浏览 0 评论 0原文

我有一个从外部服务器加载的脏 HTML 代码(因此我无法创建 json 文件或清理 html 代码)。我的 HTML 结构如下:

<!-- SOME DIRTY HTML, CSS, JS, AND OTHER STUFF -->

<div class="pic"> ... </div>

<div class="pic" id="pic311809">

<input type="hidden" class="pic_id" name="pic_id" value="311809" />

<!-- tylko komixxy.pl -->
<div style="font-family: verdana, arial, helvetica, sans-serif; font-weight: bold; font-size: 9px;">
                                        <a href="pic/show_series/1">FFFUUU (rageman)</a>
        </div>

<h1 class="picture">Kochana babcia</h1>

<div class="infobar">
    Wrzucone 15 października 2010 o 16:03       przez <a href="/user/Astraly">Astraly</a>
    |
    <a href="http://komixxy.pl/311809/Kochana-babcia#comments">Skomentuj (23)</a>
    <!-- głosowanie przeniesione pod spód obrazka -->
</div><!-- .infobar -->


<div class="pic_image">
                <a href="http://komixxy.pl/311809/Kochana-babcia"><img src="http://staticrps.komixxy.pl/uimages/201010/1287151388_by_Astraly_500.jpg" class="pic" alt="Kochana babcia - Wnusiu, a ty jeszcze nie w szkole? Dziś mamy na 10 babciu Co ty tam majaczysz? Jesteś na wagarach!? już ja to powiem twojej mamie! Ale babciu.... Przynosisz nam wstyd! Myślisz, że nie wiem o tej ostatniej niedzieli, w której nie byłeś u komunii? ZAMKNIJ SIĘ KU**A!!!! .... Nie musisz tak krzyczeć! Powiem twojej mamie z jakim tonem odnosisz się do mnie! " /></a>          </div><!-- .pic_image -->

                <div class="source">Źródło: Kto mieszka z babcią, ten wie jak to jest ;)</div>

<!-- głosowanie i ocena -->

<div class="source">

    <div class="infobar center">

        Głosuj:

        <a href="/pic/vote/311809/up"
             onclick="votowanie(this); return false;"
             class="vote voteup iconlink"
        >
            mocne ↑         </a>

        &middot;

        <a href="/pic/vote/311809/down"
             onclick="votowanie(this); return false;"
             class="vote votedown iconlink"
        >
            słabe ↓         </a>


        <!-- DODATKOWY PRZYCISK RAPORTOWANIA DUPLIKATÓW (“BYŁO”) -->

        |

        <span class="points">
                                87% mocnych
                        </span>

        <span class="count">
                                z 1291 głosów
                        </span>

        <span class="vote_result"></span>

                    | <a href="/user/add_favorite/311809" class="favorite">Do ulubionych</a>


    </div><!-- .infobar -->

    <!-- PRZYCISK LAJKONIKA -->
    <div style="text-align: center;">
        <fb:like href="http://komixxy.pl/311809/Kochana-babcia"
                         layout="button_count"
                         show_faces="true"
                         width="130"
                         font="arial"
                         style="width: 130px;">
        </fb:like>
    </div>

    <!-- tylko komixxy.pl -->
    <a href="http://komixxy.pl/pic/show_group/311809" class="picbutton">Pokaż podobne komixxy</a>       <a href="http://komixxy.pl/przerob/311809" class="picbutton">Zrób własną wersję</a>
    <div style="clear: both;"></div>

</div><!-- .source -->



</div><!-- .pic -->

<div class="pic"> ... </div>

<div class="pic"> ... </div>

<div class="pic"> ... </div>

我想使用 xPath //div[@class='pic'] 选择所有

[@id]

这是我使用的两个库:

- Hpple
- TouchXML

至于 Hpple ->这很棒,但我无法选择 emelent 的innerHTML。至于 TouchXML,我用它来解析 XML,它非常棒。但它无法解析脏 HTML - 我收到了几十个错误。

有没有办法在 iOS5 中使用 TouchXML 解析此 HTML?它可以是不同的图书馆,但我更喜欢那个。

我听说了一些关于 CTidy.h 的事情,我按照指示做了,但没有任何改变......

I have a dirty HTML code that is loaded from a foreign server (so I can't make a json file or clean the html code). My HTML's structure is like:

<!-- SOME DIRTY HTML, CSS, JS, AND OTHER STUFF -->

<div class="pic"> ... </div>

<div class="pic" id="pic311809">

<input type="hidden" class="pic_id" name="pic_id" value="311809" />

<!-- tylko komixxy.pl -->
<div style="font-family: verdana, arial, helvetica, sans-serif; font-weight: bold; font-size: 9px;">
                                        <a href="pic/show_series/1">FFFUUU (rageman)</a>
        </div>

<h1 class="picture">Kochana babcia</h1>

<div class="infobar">
    Wrzucone 15 października 2010 o 16:03       przez <a href="/user/Astraly">Astraly</a>
    |
    <a href="http://komixxy.pl/311809/Kochana-babcia#comments">Skomentuj (23)</a>
    <!-- głosowanie przeniesione pod spód obrazka -->
</div><!-- .infobar -->


<div class="pic_image">
                <a href="http://komixxy.pl/311809/Kochana-babcia"><img src="http://staticrps.komixxy.pl/uimages/201010/1287151388_by_Astraly_500.jpg" class="pic" alt="Kochana babcia - Wnusiu, a ty jeszcze nie w szkole? Dziś mamy na 10 babciu Co ty tam majaczysz? Jesteś na wagarach!? już ja to powiem twojej mamie! Ale babciu.... Przynosisz nam wstyd! Myślisz, że nie wiem o tej ostatniej niedzieli, w której nie byłeś u komunii? ZAMKNIJ SIĘ KU**A!!!! .... Nie musisz tak krzyczeć! Powiem twojej mamie z jakim tonem odnosisz się do mnie! " /></a>          </div><!-- .pic_image -->

                <div class="source">Źródło: Kto mieszka z babcią, ten wie jak to jest ;)</div>

<!-- głosowanie i ocena -->

<div class="source">

    <div class="infobar center">

        Głosuj:

        <a href="/pic/vote/311809/up"
             onclick="votowanie(this); return false;"
             class="vote voteup iconlink"
        >
            mocne ↑         </a>

        ·

        <a href="/pic/vote/311809/down"
             onclick="votowanie(this); return false;"
             class="vote votedown iconlink"
        >
            słabe ↓         </a>


        <!-- DODATKOWY PRZYCISK RAPORTOWANIA DUPLIKATÓW (“BYŁO”) -->

        |

        <span class="points">
                                87% mocnych
                        </span>

        <span class="count">
                                z 1291 głosów
                        </span>

        <span class="vote_result"></span>

                    | <a href="/user/add_favorite/311809" class="favorite">Do ulubionych</a>


    </div><!-- .infobar -->

    <!-- PRZYCISK LAJKONIKA -->
    <div style="text-align: center;">
        <fb:like href="http://komixxy.pl/311809/Kochana-babcia"
                         layout="button_count"
                         show_faces="true"
                         width="130"
                         font="arial"
                         style="width: 130px;">
        </fb:like>
    </div>

    <!-- tylko komixxy.pl -->
    <a href="http://komixxy.pl/pic/show_group/311809" class="picbutton">Pokaż podobne komixxy</a>       <a href="http://komixxy.pl/przerob/311809" class="picbutton">Zrób własną wersję</a>
    <div style="clear: both;"></div>

</div><!-- .source -->



</div><!-- .pic -->

<div class="pic"> ... </div>

<div class="pic"> ... </div>

<div class="pic"> ... </div>

I want to select all <div class="pic" id="*"> by using xPath //div[@class='pic'][@id].

Here are two libraries that I used:

- Hpple
- TouchXML

As for Hpple -> it's great but I can't select innerHTML of an emelent. As for TouchXML, I use it for parsing XML and it's great. But it doesn't manage to parse dirty HTML - I get dozens of errors.

Is there a way to parse this HTML in iOS5 using TouchXML? It can be a different library, but I prefer that one.

I heard something about CTidy.h and I did as instructed but nothing's changed...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

衣神在巴黎 2024-12-17 18:58:30

libxml 有一个专门针对这个问题设计的模块:)

http://xmlsoft.org/html/libxml- HTMLparser.html

它的工作原理与 libxml 通常工作 完全相同,即解析一个包含脏 html 的 NSData 对象:

#include <libxml/htmlparser.h>

htmlDocPtr doc; /* the resulting document tree */
doc = htmlReadMemory([data bytes], [data length], "noname.xml", NULL, HTML_PARSE_RECOVER | HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
if (NULL == doc)
    return nil;

... parse DOM here ...

xmlFreeDoc(doc);

与其网站上的 libxml 示例相比:

xmlDocPtr doc; /* the resulting document tree */
doc = xmlReadMemory(content, length, "noname.xml", NULL, 0);
if (NULL == doc)
    return nil;

... parse DOM here ...

xmlFreeDoc(doc);

PS 不要忘记将 libxml2.dylib 作为 '将二进制文件与库链接' 项目构建阶段

libxml has a module designed exactly for this problem :)

http://xmlsoft.org/html/libxml-HTMLparser.html

It works exactly the same as libxml normally works i.e. to parse an NSData object containing dirty html:

#include <libxml/htmlparser.h>

htmlDocPtr doc; /* the resulting document tree */
doc = htmlReadMemory([data bytes], [data length], "noname.xml", NULL, HTML_PARSE_RECOVER | HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
if (NULL == doc)
    return nil;

... parse DOM here ...

xmlFreeDoc(doc);

compared to the libxml example from their website :

xmlDocPtr doc; /* the resulting document tree */
doc = xmlReadMemory(content, length, "noname.xml", NULL, 0);
if (NULL == doc)
    return nil;

... parse DOM here ...

xmlFreeDoc(doc);

PS Don't forget to include libxml2.dylib into your project as a framework in the 'link binary with libraries' project build phase

段念尘 2024-12-17 18:58:30

如果我这样做,我会在将 HTML 传递给库之前解析 HTML,并清除所有“脏”位,找到并删除之间的所有内容,对其他脏区域执行相同的操作,这样会更容易处理该文件的库。

If I was doing this I would parse the HTML before passing it the the libraries and clean out all of the 'dirty' bits find the and and remove everything in between, doing the same for the other dirty areas then it will be easier for the libraries to work with the file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文