【问题标题】:Parsing using NSXMLParser使用 NSXMLParser 解析
【发布时间】:2011-11-11 19:22:20
【问题描述】:

我正在从 Web 服务返回一些 XML。基本上,xml 看起来像这样:

<response>
    <data>
    More XML here but the it's escaped by XML entities
    </data>
</response>

所以,如您所见,我的 xml 是有效的,但数据标签中的内容是用 XML 实体转义的。我将其输入解析器的最佳(最有效)方式是什么?

我现在正在做的是,当我从 Web 服务获取数据时,我将其转换为 NSString....然后将“XML 转义实体”替换为真实的......然后将其转换回NSData ...然后将其输入解析器。这似乎不是一个很好的解决方案,所以我想知道是否有更好的方法来做到这一点?

谢谢。

好的,这是我得到的 xml:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><ActivityId CorrelationId="d39007b5-ee69-41c7-a61d-831b456f9ea3" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">aa88d1cd-253c-48d1-abeb-62a880bea806</ActivityId></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><LoginResponse xmlns="http://MSS"><LoginResult>&lt;LoginInformation&gt;&#xD;
  &lt;User&gt;&#xD;
    &lt;UserID&gt;612&lt;/UserID&gt;&#xD;
    &lt;UserName&gt;Demo User&lt;/UserName&gt;&#xD;
    &lt;Email&gt;mssdev@mss-mail.com&lt;/Email&gt;&#xD;
    &lt;CompanyID&gt;17034&lt;/CompanyID&gt;&#xD;
    &lt;CompanyName&gt;PlanET Demonstration Agency&lt;/CompanyName&gt;&#xD;
  &lt;/User&gt;&#xD;
&lt;/LoginInformation&gt;</LoginResult></LoginResponse></s:Body></s:Envelope>

如你所见,里面的所有东西都被转义了。

【问题讨论】:

  • 你能提供一个更好的例子吗?只是数据中的东西像 &被转义或是否有像 <elementName> 一样被转义的完整 xml 标签等等……
  • 更新了我的问题。请检查一下。谢谢

标签: objective-c ios cocoa-touch nsxmlparser


【解决方案1】:

这有点可怕。为什么不直接获取该标签的内容(例如带有实体的数据),然后将其传递给另一个 NSXMLParser?第一个解析器将解码实体,第二个解析器将显示该标签内容的解码版本。

【讨论】:

  • 对不起,我不确定你的意思。我仍然需要将数据标签的内容转换为 NSString,取消实体,将其放回 NSData,然后将其发送到下一个解析器。还是我误解了你的意思?
  • 你误会了。当您首先通过 NSXMLParser 传递数据时,根据解析器的语义,它会为您提供 标记的整个文本的单个 NSData,或者它会为您提供文本的数据序列和实体(我不太确定是哪个)。如果是后者,您可以将它们全部压缩成一个 NSData。无论哪种方式,您最终都会得到一个包含 内容的 NSData,其中所有实体都已取消转义。然后你可以通过另一个 NSXMLParser 来解析它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2011-09-09
  • 2012-09-02
相关资源
最近更新 更多