【问题标题】:while parse the HTML using NSXMLParser, not full data in iPhone使用 NSXMLParser 解析 HTML,而不是 iPhone 中的完整数据
【发布时间】:2012-12-28 07:45:03
【问题描述】:

在解析 xml 时,没有完整的数据在一些字行结束后得到更多的阅读

以下三个代码位于一个 html 页面中,为了更好地理解,我尽管这样做了。

我正在使用 NSXMLParser 将其解析到我的 iPhone 应用程序中。 问题是它解析到下面的<Style> 然后它停止解析文本并完全忽略文本下面的数据!!!

<head>

        <title>North Mobile County Middle School: Latest News > "1st Annual NMCK-8 Christmas Music Program"</title>
        <META HTTP-EQUIV="X-UA-COMPATIBLE" CONTENT="IE=EmulateIE9">
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <meta http-equiv="imagetoolbar" content="no">
        <script type="text/javascript" src="JavaScripts.js"></script>
        <script type="text/javascript" src="JavaScripts/NiceTitles.js"></script>


    <style type="text/css">

为了更好的理解,我正在拆分代码

!--

body {
    margin:0; padding:0;
    background: #fff;}  
body, td {
    font: normal 13px "Trebuchet MS", Arial, Helvetica, sans-serif;
    color:#333;}
/***********************************************/
/* Links
/***********************************************/ 

a:link, a:visited {
    color: #CD0000;
    text-decoration: none;}
a:hover, a:active { 
    color: #06f;
    text-decoration: underline;}

img {border: 0;}

为了更好地理解,我正在拆分代码

#MainPageArea {padding: 0 15px 15px 15px}
</style>
    <link href="http://images.pcmac.org/SiSFiles/Schools/AL/MobileCounty/NorthMobileMiddle/styles.css" rel="stylesheet" type="text/css">
    <!--[if lt IE 7]>
        <link href="Common/CommonIncludes/Template11/IEStyles.css" rel="stylesheet" type="text/css">
    <![endif]-->
    <link rel="Shortcut Icon" type="image/ico" href="http://images.pcmac.org/SiSFiles/Schools/AL/MobileCounty/NorthMobileMiddle/images/favicon.ico" />

</head>
<body class="DefaultPage">
    <table align="center" cellpadding="0" cellspacing="0" width="986" border="0" id="PageWrapper">
        <tr>
            <td valign="top">
                <div id="Header">

我使用的代码如下:

-(id) loadHtmlByURL:(NSString *)urlString
{

    NSURL       *url        = [NSURL URLWithString:urlString];
    NSData      *nsData     = [[NSData alloc] initWithContentsOfURL:url];

    elementArray            = [[NSMutableArray alloc] init];

    parser                  = [[NSXMLParser alloc] initWithData:nsData];
    parser.delegate         = self;
    [parser parse];

    currentHTMLElement = [HtmlElement alloc];

    return self;
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"%@",elementname);
    currentHTMLElement = [[HtmlElement alloc] autorelease];
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"%@",elementname);
if ([elementname isEqualToString:@"head"])
    {
        currentHTMLElement.tag = elementname;
        currentHTMLElement.value = currentNodeContent;
        [elementArray addObject:currentHTMLElement];
        currentHTMLElement = nil;
        currentNodeContent = nil;
       // NSLog(@"x%@",elementArray);
    }

我能知道我被击中了吗

【问题讨论】:

  • 你的文件是格式良好的 XML 吗?
  • 它的 HTML,它的读取数据直到中间的文本,但不是在那之后
  • 你能通过 XML 检查器运行它吗?
  • 我对 XML 检查器一无所知

标签: iphone html ios ipad


【解决方案1】:

您应该只使用 NSXMLParser 类来解析实际上是 XML 的内容。 HTML 不是,除非它是 XHTML,而您的源代码不是:meta 标签未关闭,您的 style 标签以从未关闭的注释开头(我猜,这就是解析器的原因从不读过去);此外,title 的文本节点内容应该只包含&amp;gt; 和" 的转义版本(转义序列为&amp;gt; 和&amp;quot;)。

如果您可以控制 HTML,请尝试将其更改为与 XML-(因此,XHTML-)兼容。如果您无法更改 HTML,请尝试标记汤解析,例如使用 hpple。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 2012-10-19
      • 2011-11-11
      • 2011-11-20
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多