【问题标题】:How to extract an html text from an xml? (Parser Rapture XML, language Objective C)如何从 xml 中提取 html 文本? (Parser Rapture XML,语言 Objective C)
【发布时间】:2013-03-08 21:27:40
【问题描述】:

xml解析器可以提取html文本吗?

详细解释: 我有这个简单的xml

<?xml version="1.0" encoding="iso-8859-1"?>
<eventi>
<evento><id_evento>4553</id_evento><descrizione>Lorem Ipsum<a href='http://www.yea.it/yea.asp' target='_blank'><span class='U'>Vai alla pagina di gioco</span></a></descrizione></evento>
</eventi>

我正在用 rapture XML 解析它,同时为 IOS 开发应用程序。当我这样做时

rootXML = [RXMLElement elementFromURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", indXMLdettaglioEvento, idElemento]]];
[rootXML iterateWithRootXPath:@"//evento" usingBlock: ^(RXMLElement *datiXML) {
      NSLog(@"%@",[datiXML child:@"descrizione"].text);;
]}

[datiXML child:@"descrizione"].text 的 nslog 返回没有 html 标签的文本。可以让它返回整个html吗?

【问题讨论】:

  • 请 NSLog 喜欢:NSLog(@"%@",[datiXML child:@"descrizione"]);
  • 做到了,它返回没有html的文本
  • HTML 不是 XML 的子集,因此您将无法使用任何 XML 解析器可靠地解析 HTML。然而,xHTML 是一个子集,如果使用得当,应该可以使用 XML 解析器(例如 RaptureXML)进行解析。
  • 所以没有希望解析完整的标签的html文本?
  • @ElisabettaFalivene 我的评论更笼统,对我来说,您的具体示例似乎是格式良好的 XML,因此应该是可解析的。

标签: html ios objective-c xml


【解决方案1】:
 [datiXML child:@"descrizione"]

返回一个已解析的 XML 项,其中包含 Lorem Ipsum 文本,但它本身也有子项!我想您会发现第一个孩子将成为您的链接锚点的 XML 项:

 [[dataiXML child::@"descrizione"] child: @"a"]  => XML item for link
 [[[dataiXML child::@"descrizione"] child: @"a"] child: @"span"] => XML item for span

所以你需要遍历整个树来解析你的 xHTML——但我想你会发现它就在那里。

正如之前的评论者所说,许多有效的 HTML 页面不是有效的 XML。并且许多“工作”的 HTML 页面是无效的!因此,这不是编写 Web 浏览器的好策略。但这不是我们在这里所做的;如果您正在与之交谈的服务提供 XML,那么使用 XML 解析器来解析它是非常有意义的!

【讨论】:

  • 有趣! “遍历”整棵树是什么意思?我一直不明白。你的意思是我需要在每个孩子“描述”中搜索是否有“a”、“span”、“img”等等?看起来很复杂...
  • 再看一下 Rapture XML 文档。它具有检索与查询匹配的所有子元素组成的数组,或将每个子元素传递给块的方法。您将不知道您将在 HTML 中获得哪些元素,因此您将传递一个 XPath 通配符,如 descrizione/* 以获取一个包含所有descrizione 子项的数组
【解决方案2】:

您可以使用一些开源库,如 TinyXML、TouchXML 等来解析 XML 文档。

否则您可以使用 NSXMLParser 编写自己的解析器。

希望这有帮助!

【讨论】:

  • 我开发了一个非常复杂的应用程序,现在不是更改解析器的好时机,很遗憾^^'
  • 为什么 RaptureXML 不行?根据我的经验,它是一个很棒的解析器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多