TBXML解析textForElement时出现的问题

问题描述:

我使用TBXML时遇到了一个很大的问题。TBXML解析textForElement时出现的问题

当我使用:

+ (NSString*) textForElement:(TBXMLElement*)aXMLElement { 
    if (nil == aXMLElement->text) return @""; 
    return [NSString stringWithCString:&aXMLElement->text[0] encoding:NSUTF8StringEncoding]; 
} 

解析这个XML

[...] 
<step id=123>this string is not parsed 
    <draw_at x="1964"/> 
    <partials> 
    <partial sd="23"> 
     <line>ANOTHER TEXT 1</line> 
     <line>ANOTHER TEXT 2</line> 
    </partial> 
    </partials> 
</step> 
[...] 

我得到一个EMPTY字符串。

我想这是因为STEP标签有一个以上的文字,

事实上,如果我用同样的功能来获得 又迈进了一步不谐音标签, 字符串是正确的,不空!

我得到的步骤以这样的方式

NSstring *_step = [TBXML textForElement:step]; 

任何想法来解决这个问题?

谢谢。

编辑:这个XML是有效的。它被使用了多年。只是从mooore的原始复制部分粘贴到这里。

编辑2:我手写这段代码,可能省略引号或别的东西,但xml是有效的。

+1

在有效的XML中,必须引用每个属性值。 – 2011-06-08 08:55:00

+0

@Bavarious我的问题是文本解析,而不是XML的有效性。从服务器出来时这是有效的! – elp 2011-06-08 09:21:02

+0

它的解析器问题..他们没有处理它我相信。它最好你把这个字符串放在一个更多的标记。或UL必须通过他们的逻辑。 – Priyanka 2011-06-08 10:31:18

临时修补使用其他解析器行空。
我使用PerformXMLXPathQuery()XPathQuery.h/.m

它的工作原理!

...和XML是正确的, 验证与W3CNO错误

报告从validator.w3.org

该文件已成功签 作为格式良好的XML!
结果:合格,1个警告

如果有一个更好的解决方案,而不是这个补丁,我改变与正确回答正确的答案。

谢谢。

该XML不是有效的XML,因此您将遇到问题。同样的事情也适用于libxml2(我知道我有同样的问题)。

+0

此XML有效。它被使用了多年。只是从mooore的原始复制部分粘贴到这里。 – elp 2011-06-08 08:50:37

+1

它可能会使用多年,但其无效的XML。 – 2011-06-08 08:51:35

让我清楚你的问题简单的例子,我从TBXML

如果你想解析XML类似forum了,

<xml> 
<alert id="b19260fa7f00000100258097dcd87ab7"> 
    <title>MU-Lancaster Now Open</title> 
    <startdate>1304353800</startdate> 
    <enddate>1304362800</enddate> 
    <type>Emergency</type> 
    <message> 
     <p>MU-Lancaster, at 42 N. Prince St., in Lancaster, is now open.&#160; It had been closed this morning due to the evacuation of downtown Lancaster.</p> 
    </message> 
</alert> 

比你需要编写代码解析如下,

- (void)parseMuAlertXML{ 
TBXML *tbxml; 
TBXMLElement *rootXMLElement; 
TBXMLElement *node_alert; 
TBXMLElement *node_message; 
TBXMLElement *node_traverse; 

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970]; 

NSURL *url = [NSURL URLWithString:@"http://www.millersville.edu/alert/alert.xml"]; 

tbxml = [TBXML tbxmlWithURL:url]; 

rootXMLElement = tbxml.rootXMLElement; (rootXMLElement) {node_alert = [TBXML childElementNamed:@“alert”parentElement:rootXMLElement];如果(rootXMLElement) node_alert = [TBXML childElementNamed:

if(node_alert) 
    { 
     node_traverse = [TBXML childElementNamed:@"startdate" parentElement:node_alert]; 
     NSInteger startString = [[TBXML textForElement:node_traverse] intValue]; 
     time_t startTime = startString; 

     node_traverse = [TBXML childElementNamed:@"enddate" parentElement:node_alert]; 
     NSInteger endString = [[TBXML textForElement:node_traverse] intValue]; 
     time_t endTime = endString; 

     node_traverse = [TBXML childElementNamed:@"type" parentElement:node_alert]; 
     alertType = [[TBXML textForElement:node_traverse] retain]; 

     node_message = [TBXML childElementNamed:@"message" parentElement:node_alert]; 

     if(node_message) 
     { 
      node_traverse = [TBXML childElementNamed:@"p" parentElement:node_message]; 
      alertMessage = [TBXML textForElement:node_traverse]; 
      alertMessage = [alertMessage stringByReplacingOccurrencesOfString:@"&#160;" withString:@" "]; 
     } 

     if((unixTime >= startTime) && (unixTime <= endTime)) 
     { 
      [alertButton setHidden:NO]; 
      [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; 
     } else { 
      [alertButton setHidden:YES]; 
      [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; 
     } 
    } 
} 

}

也是你的XML是无效的XML, 我想你的XML是,

<step id="123"> this string is not parsed<draw_at x="1964"/><partials><partial sd="23"><line>ANOTHER TEXT 1</line><line>ANOTHER TEXT</line></partial></partials></step> 
+0

@Simon你的起始标签是,结束标签是,它的有效性如何? – 2011-06-08 08:58:04

+0

如果您的xml与中的不同之处相似,那么TEXT [...]您如何获得TEXT? – <span class="text-secondary"> <small> <a rel="noopener">elp</a></small></span> <span>2011-06-08 09:09:08</span>

+0

我认为..会有而不是 in XML – 2011-06-08 09:16:30